GetBuffer() public method

public GetBuffer ( ) : byte[]
return byte[]
Ejemplo n.º 1
0
        public void Fill(ImageReaderWriterBase bufferToFillOn, int x, int y)
        {
            unchecked // this way we can overflow the uint on negative and get a big number
            {
                if ((uint)x > bufferToFillOn.Width || (uint)y > bufferToFillOn.Height)
                {
                    return;
                }
            }

            destImage   = bufferToFillOn;
            imageStride = destImage.Stride;
            destBuffer  = destImage.GetBuffer();
            int imageWidth  = destImage.Width;
            int imageHeight = destImage.Height;

            pixelsChecked = new bool[destImage.Width * destImage.Height];
            int startColorBufferOffset = destImage.GetBufferOffsetXY(x, y);

            fillRule.SetStartColor(Drawing.Color.FromArgb(destImage.GetBuffer()[startColorBufferOffset + 2], destImage.GetBuffer()[startColorBufferOffset + 1], destImage.GetBuffer()[startColorBufferOffset]));
            LinearFill(x, y);
            while (ranges.Count > 0)
            {
                Range range           = ranges.Dequeue();
                int   downY           = range.y - 1;
                int   upY             = range.y + 1;
                int   downPixelOffset = (imageWidth * (range.y - 1)) + range.startX;
                int   upPixelOffset   = (imageWidth * (range.y + 1)) + range.startX;
                for (int rangeX = range.startX; rangeX <= range.endX; rangeX++)
                {
                    if (range.y > 0)
                    {
                        if (!pixelsChecked[downPixelOffset])
                        {
                            int bufferOffset = destImage.GetBufferOffsetXY(rangeX, downY);
                            if (fillRule.CheckPixel(destBuffer, bufferOffset))
                            {
                                LinearFill(rangeX, downY);
                            }
                        }
                    }

                    if (range.y < (imageHeight - 1))
                    {
                        if (!pixelsChecked[upPixelOffset])
                        {
                            int bufferOffset = destImage.GetBufferOffsetXY(rangeX, upY);
                            if (fillRule.CheckPixel(destBuffer, bufferOffset))
                            {
                                LinearFill(rangeX, upY);
                            }
                        }
                    }
                    upPixelOffset++;
                    downPixelOffset++;
                }
            }
        }
Ejemplo n.º 2
0
        public void SetPixelHighRes(ImageReaderWriterBase sourceImage,
                                    ColorRGBA[] destBuffer,
                                    int destBufferOffset,
                                    int x,
                                    int y)
        {
            int r, g, b, a;

            r = g = b = a = LineAA.SUBPIXEL_SCALE * LineAA.SUBPIXEL_SCALE / 2;

            int weight;
            int x_lr = x >> LineAA.SUBPIXEL_SHIFT;
            int y_lr = y >> LineAA.SUBPIXEL_SHIFT;

            x &= LineAA.SUBPIXEL_MARK;
            y &= LineAA.SUBPIXEL_MARK;
            int sourceOffset;

            byte[] ptr = sourceImage.GetBuffer();
            sourceOffset = sourceImage.GetBufferOffsetXY(x_lr, y_lr);

            weight = (LineAA.SUBPIXEL_SCALE - x) *
                     (LineAA.SUBPIXEL_SCALE - y);
            r += weight * ptr[sourceOffset + CO.R];
            g += weight * ptr[sourceOffset + CO.G];
            b += weight * ptr[sourceOffset + CO.B];
            a += weight * ptr[sourceOffset + CO.A];

            sourceOffset += sourceImage.BytesBetweenPixelsInclusive;

            weight = x * (LineAA.SUBPIXEL_SCALE - y);
            r     += weight * ptr[sourceOffset + CO.R];
            g     += weight * ptr[sourceOffset + CO.G];
            b     += weight * ptr[sourceOffset + CO.B];
            a     += weight * ptr[sourceOffset + CO.A];

            sourceOffset = sourceImage.GetBufferOffsetXY(x_lr, y_lr + 1);

            weight = (LineAA.SUBPIXEL_SCALE - x) * y;
            r     += weight * ptr[sourceOffset + CO.R];
            g     += weight * ptr[sourceOffset + CO.G];
            b     += weight * ptr[sourceOffset + CO.B];
            a     += weight * ptr[sourceOffset + CO.A];

            sourceOffset += sourceImage.BytesBetweenPixelsInclusive;

            weight = x * y;
            r     += weight * ptr[sourceOffset + CO.R];
            g     += weight * ptr[sourceOffset + CO.G];
            b     += weight * ptr[sourceOffset + CO.B];
            a     += weight * ptr[sourceOffset + CO.A];

            destBuffer[destBufferOffset].red   = (byte)(r >> LineAA.SUBPIXEL_SHIFT * 2);
            destBuffer[destBufferOffset].green = (byte)(g >> LineAA.SUBPIXEL_SHIFT * 2);
            destBuffer[destBufferOffset].blue  = (byte)(b >> LineAA.SUBPIXEL_SHIFT * 2);
            destBuffer[destBufferOffset].alpha = (byte)(a >> LineAA.SUBPIXEL_SHIFT * 2);
        }
 public void SetPixelHighRes(ImageReaderWriterBase sourceImage,
     Color[] destBuffer,
     int destBufferOffset,
     int x,
     int y)
 {
     int r, g, b, a;
     r = g = b = a = LineAA.SUBPIXEL_SCALE * LineAA.SUBPIXEL_SCALE / 2;
     int weight;
     int x_lr = x >> LineAA.SUBPIXEL_SHIFT;
     int y_lr = y >> LineAA.SUBPIXEL_SHIFT;
     x &= LineAA.SUBPIXEL_MARK;
     y &= LineAA.SUBPIXEL_MARK;
     int sourceOffset;
     byte[] ptr = sourceImage.GetBuffer();
     sourceOffset = sourceImage.GetBufferOffsetXY(x_lr, y_lr);
     weight = (LineAA.SUBPIXEL_SCALE - x) *
              (LineAA.SUBPIXEL_SCALE - y);
     r += weight * ptr[sourceOffset + CO.R];
     g += weight * ptr[sourceOffset + CO.G];
     b += weight * ptr[sourceOffset + CO.B];
     a += weight * ptr[sourceOffset + CO.A];
     sourceOffset += sourceImage.BytesBetweenPixelsInclusive;
     weight = x * (LineAA.SUBPIXEL_SCALE - y);
     r += weight * ptr[sourceOffset + CO.R];
     g += weight * ptr[sourceOffset + CO.G];
     b += weight * ptr[sourceOffset + CO.B];
     a += weight * ptr[sourceOffset + CO.A];
     sourceOffset = sourceImage.GetBufferOffsetXY(x_lr, y_lr + 1);
     weight = (LineAA.SUBPIXEL_SCALE - x) * y;
     r += weight * ptr[sourceOffset + CO.R];
     g += weight * ptr[sourceOffset + CO.G];
     b += weight * ptr[sourceOffset + CO.B];
     a += weight * ptr[sourceOffset + CO.A];
     sourceOffset += sourceImage.BytesBetweenPixelsInclusive;
     weight = x * y;
     r += weight * ptr[sourceOffset + CO.R];
     g += weight * ptr[sourceOffset + CO.G];
     b += weight * ptr[sourceOffset + CO.B];
     a += weight * ptr[sourceOffset + CO.A];
     destBuffer[destBufferOffset].red = (byte)(r >> LineAA.SUBPIXEL_SHIFT * 2);
     destBuffer[destBufferOffset].green = (byte)(g >> LineAA.SUBPIXEL_SHIFT * 2);
     destBuffer[destBufferOffset].blue = (byte)(b >> LineAA.SUBPIXEL_SHIFT * 2);
     destBuffer[destBufferOffset].alpha = (byte)(a >> LineAA.SUBPIXEL_SHIFT * 2);
 }
Ejemplo n.º 4
0
        public void Fill(ImageReaderWriterBase bufferToFillOn, int x, int y)
        {
            unchecked // this way we can overflow the uint on negative and get a big number
            {
                if ((uint)x > bufferToFillOn.Width || (uint)y > bufferToFillOn.Height)
                {
                    return;
                }
            }

            destImage = bufferToFillOn;
            imageStride = destImage.Stride;
            destBuffer = destImage.GetBuffer();
            int imageWidth = destImage.Width;
            int imageHeight = destImage.Height;
            pixelsChecked = new bool[destImage.Width * destImage.Height];
            int startColorBufferOffset = destImage.GetBufferOffsetXY(x, y);
            fillRule.SetStartColor(Drawing.Color.FromArgb(destImage.GetBuffer()[startColorBufferOffset + 2], destImage.GetBuffer()[startColorBufferOffset + 1], destImage.GetBuffer()[startColorBufferOffset]));
            LinearFill(x, y);
            while (ranges.Count > 0)
            {
                Range range = ranges.Dequeue();
                int downY = range.y - 1;
                int upY = range.y + 1;
                int downPixelOffset = (imageWidth * (range.y - 1)) + range.startX;
                int upPixelOffset = (imageWidth * (range.y + 1)) + range.startX;
                for (int rangeX = range.startX; rangeX <= range.endX; rangeX++)
                {
                    if (range.y > 0)
                    {
                        if (!pixelsChecked[downPixelOffset])
                        {
                            int bufferOffset = destImage.GetBufferOffsetXY(rangeX, downY);
                            if (fillRule.CheckPixel(destBuffer, bufferOffset))
                            {
                                LinearFill(rangeX, downY);
                            }
                        }
                    }

                    if (range.y < (imageHeight - 1))
                    {
                        if (!pixelsChecked[upPixelOffset])
                        {
                            int bufferOffset = destImage.GetBufferOffsetXY(rangeX, upY);
                            if (fillRule.CheckPixel(destBuffer, bufferOffset))
                            {
                                LinearFill(rangeX, upY);
                            }
                        }
                    }
                    upPixelOffset++;
                    downPixelOffset++;
                }
            }
        }