示例#1
0
        public static PixelValue CopyPixel(this BitmapSource bs, int x, int y)
        {
            if (bs == null)
            {
                throw new ArgumentNullException(nameof(bs) + " is null.");
            }

            if (x >= bs.PixelWidth || x < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(x));
            }

            if (y >= bs.PixelHeight || y < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(y));
            }

            var chn   = bs.GetChannelCount();
            var value = new byte[chn];

            Array.Clear(value, 0, value.Length);

            bs.CopyPixels(
                new Int32Rect(x, y, 1, 1),
                value,
                (bs.Format.BitsPerPixel * bs.PixelWidth + 7) / 8,
                0);

            var pixelValue = new PixelValue
            {
                Alpha = PixelValue.AlphaDefault
            };

            switch (chn)
            {
            case 1:
                pixelValue.Red = pixelValue.Green = pixelValue.Blue = value[0];
                break;

            case 3:
                pixelValue.Red   = value[2];
                pixelValue.Green = value[1];
                pixelValue.Blue  = value[0];
                break;

            case 4:
                pixelValue.Red   = value[2];
                pixelValue.Green = value[1];
                pixelValue.Blue  = value[0];
                pixelValue.Alpha = value[3];
                break;

            default:
                throw new NotImplementedException();
            }

            return(pixelValue);
        }