IsAreaNegativeOrEmpty() public static method

public static IsAreaNegativeOrEmpty ( Rectangle rect ) : bool
rect Rectangle
return bool
Example #1
0
        public void Apply(PixelFunctionXY pixelFunc, Rectangle region)
        {
            Rectangle rect = ClampRectangle(region, Bounds);

            if (Rectangle.IsAreaNegativeOrEmpty(rect))
            {
                return;
            }

            int sourceOffset = rect.Y * ScanlineSize + rect.X * _bytesPerPixel;

            for (int y = 0; y < rect.Height; y++)
            {
                int lineIndex = sourceOffset + y * ScanlineSize;
                for (int x = 0; x < rect.Width; x++)
                {
                    int   index  = lineIndex + x * _bytesPerPixel;
                    Color result = pixelFunc(new Color(
                                                 _data[index + 0],
                                                 _data[index + 1],
                                                 _data[index + 2],
                                                 _data[index + 3]), rect.X + x, rect.Y + y);
                    _data[index + 0] = result.R;
                    _data[index + 1] = result.G;
                    _data[index + 2] = result.B;
                    _data[index + 3] = result.A;
                }
            }
        }
Example #2
0
        public void Set(TextureResource data, Point location)
        {
            if (data == null)
            {
                return;
            }

            Rectangle rect = ClampRectangle(new Rectangle(location, data.Size), Bounds);

            if (Rectangle.IsAreaNegativeOrEmpty(rect))
            {
                return;
            }

            int dataScan  = data.ScanlineSize;
            int clampScan = rect.Width * _bytesPerPixel;

            int sourceOffset = (rect.Y - location.Y) * dataScan + (rect.X - location.X) * _bytesPerPixel;
            int targetOffset = rect.Y * ScanlineSize + rect.X * _bytesPerPixel;

            for (int y = 0; y < rect.Height; y++)
            {
                int sourceIndex = sourceOffset + y * dataScan;
                int destIndex   = targetOffset + y * ScanlineSize;
                Array.Copy(data._data, sourceIndex, _data, destIndex, clampScan);
            }
        }
Example #3
0
        public void SetComposite(TextureResource data, Point location)
        {
            Rectangle rect = ClampRectangle(new Rectangle(location, data.Size), Bounds);

            if (Rectangle.IsAreaNegativeOrEmpty(rect))
            {
                return;
            }

            int dataScan  = data.ScanlineSize;
            int clampScan = rect.Width * _bytesPerPixel;

            int sourceOffset = (rect.Y - location.Y) * dataScan + (rect.X - location.X) * _bytesPerPixel;
            int targetOffset = rect.Y * ScanlineSize + rect.X * _bytesPerPixel;

            for (int y = 0; y < rect.Height; y++)
            {
                for (int x = 0; x < rect.Width; x++)
                {
                    int sourceIndex = sourceOffset + y * dataScan + x * _bytesPerPixel;
                    int destIndex   = targetOffset + y * ScanlineSize + x * _bytesPerPixel;

                    float alpha = data._data[sourceIndex + 3] / 255f;
                    _data[destIndex + 0] = (byte)(_data[destIndex + 0] * (1f - alpha) + data._data[sourceIndex + 0] * alpha);
                    _data[destIndex + 1] = (byte)(_data[destIndex + 1] * (1f - alpha) + data._data[sourceIndex + 1] * alpha);
                    _data[destIndex + 2] = (byte)(_data[destIndex + 2] * (1f - alpha) + data._data[sourceIndex + 2] * alpha);
                    _data[destIndex + 3] = (byte)Math.Min(255, _data[destIndex + 3] * (1f - alpha) + data._data[sourceIndex + 3]);
                }
            }
        }
Example #4
0
        public TextureResource Crop(Rectangle region)
        {
            Rectangle rect = ClampRectangle(region, Bounds);

            if (Rectangle.IsAreaNegativeOrEmpty(rect))
            {
                return(new TextureResource(0, 0));
            }

            TextureResource sub = new TextureResource(rect.Width, rect.Height);

            int priScan = ScanlineSize;
            int subScan = sub.ScanlineSize;

            int sourceOffset = rect.Y * priScan + rect.X * _bytesPerPixel;

            for (int y = 0; y < rect.Height; y++)
            {
                int sourceIndex = sourceOffset + y * priScan;
                int destIndex   = y * subScan;
                Array.Copy(_data, sourceIndex, sub._data, destIndex, subScan);
            }

            return(sub);
        }