Пример #1
0
        /// <summary>
        /// Copies the given area of source array into the same area of current array without updating the changes array.
        /// </summary>
        /// <param name="source"></param>
        /// <param name="minX"></param>
        /// <param name="minY"></param>
        /// <param name="maxX"></param>
        /// <param name="maxY"></param>
        public void CopyAreaBatch(FastBitmapArray source, int minX, int minY, int maxX, int maxY)
        {
            if (minX < 0)
            {
                minX = 0;
            }
            if (minY < 0)
            {
                minY = 0;
            }
            if (maxX >= width)
            {
                maxX = width - 1;
            }
            if (maxY >= height)
            {
                maxY = height - 1;
            }

            for (int x = minX; x <= maxX; x++)
            {
                for (int y = minY; y <= maxY; y++)
                {
                    R[x][y] = source.R[x][y];
                    G[x][y] = source.G[x][y];
                    B[x][y] = source.B[x][y];
                    A[x][y] = source.A[x][y];
                }
            }
        }
Пример #2
0
        public FastBitmapArray ScaleUp(int scaling)
        {
            var scaledUp = new FastBitmapArray(scaling * width, scaling * height);

            int xScaled = 0;
            int yScaled = 0;

            for (int x = 0; x < width; ++x)
            {
                yScaled = 0;
                for (int y = 0; y < height; ++y)
                {
                    for (int yy = 0; yy < scaling; ++yy)
                    {
                        for (int xx = 0; xx < scaling; ++xx)
                        {
                            int xxx = xScaled + xx;
                            int yyy = yScaled + yy;
                            scaledUp.R[xxx][yyy]       = R[x][y];
                            scaledUp.G[xxx][yyy]       = G[x][y];
                            scaledUp.B[xxx][yyy]       = B[x][y];
                            scaledUp.A[xxx][yyy]       = A[x][y];
                            scaledUp.changed[xxx][yyy] = true;
                        }
                    }
                    yScaled += scaling;
                }
                xScaled += scaling;
            }

            return(scaledUp);
        }
Пример #3
0
        public FastBitmapArray ScaleDown(int scaling)
        {
            if (width % scaling > 0 || height % scaling > 0)
            {
                throw new ArgumentException("such bitmap cannot be scaled down");
            }
            var scaledDown = new FastBitmapArray(width / scaling, height / scaling);

            double divisor = scaling * scaling;

            int xScaled = 0;
            int yScaled = 0;

            for (int x = 0; x < scaledDown.width; ++x)
            {
                yScaled = 0;
                for (int y = 0; y < scaledDown.height; ++y)
                {
                    double avgR = 0, avgG = 0, avgB = 0, avgA = 0;
                    for (int yy = 0; yy < scaling; ++yy)
                    {
                        for (int xx = 0; xx < scaling; ++xx)
                        {
                            int xxx = xScaled + xx;
                            int yyy = yScaled + yy;
                            avgR += R[xxx][yyy];
                            avgG += G[xxx][yyy];
                            avgB += B[xxx][yyy];
                            avgA += A[xxx][yyy];
                        }
                    }

                    scaledDown.R[x][y]       = avgR / divisor;
                    scaledDown.G[x][y]       = avgG / divisor;
                    scaledDown.B[x][y]       = avgB / divisor;
                    scaledDown.A[x][y]       = avgA / divisor;
                    scaledDown.changed[x][y] = true;

                    yScaled += scaling;
                }
                xScaled += scaling;
            }

            return(scaledDown);
        }
Пример #4
0
 /// <summary>
 /// Copies the given area of source array into the same area of current array and updates the array with changes.
 /// </summary>
 /// <param name="source"></param>
 /// <param name="minX"></param>
 /// <param name="minY"></param>
 /// <param name="maxX"></param>
 /// <param name="maxY"></param>
 public void CopyArea(FastBitmapArray source, int minX, int minY, int maxX, int maxY)
 {
     CopyAreaBatch(source, minX, minY, maxX, maxY);
     SetBatchArea(minX, minY, maxX, maxY);
 }
Пример #5
0
 /// <summary>
 /// Copies the whole source array into the current array and updates the array with changes.
 /// </summary>
 /// <param name="source"></param>
 public void CopyArea(FastBitmapArray source)
 {
     CopyArea(source, 0, 0, source.width - 1, source.height - 1);
 }
Пример #6
0
 /// <summary>
 /// Copies the source array.
 /// </summary>
 /// <param name="source"></param>
 public FastBitmapArray(FastBitmapArray source)
     : this(source.width, source.height)
 {
     CopyAreaBatch(source);
 }