Пример #1
0
        public void SetPixelARGB()
        {
            int rows            = 19;
            int columns         = 7;
            int bitsAllocated   = 8;
            int samplesPerPixel = 4;
            int imageSize       = rows * columns * bitsAllocated / 8 * samplesPerPixel;

            byte[] pixelData = new byte[imageSize];

            ColorPixelData pixelDataWrapper = new ColorPixelData(
                rows,
                columns,
                pixelData);

            int x = 3;
            int y = 4;

            Color testValue = Color.FromArgb(10, 20, 30);

            pixelDataWrapper.SetPixel(x, y, testValue);
            Color actualValue = pixelDataWrapper.GetPixelAsColor(x, y);

            Assert.AreEqual(testValue, actualValue);

            pixelDataWrapper.SetPixel(x, y, testValue.ToArgb());
            actualValue = pixelDataWrapper.GetPixelAsColor(x, y);
            Assert.AreEqual(testValue, actualValue);

            pixelDataWrapper.SetPixel(x, y, testValue.ToArgb());
            actualValue = Color.FromArgb(pixelDataWrapper.GetPixel(x, y));
            Assert.AreEqual(testValue, actualValue);

            // Make sure it works with unsafe code too
            fixed(byte *pPixelData = pixelDataWrapper.Raw)
            {
                int bytesPerPixel = 4;
                int stride        = columns * bytesPerPixel;
                int i             = (y * stride) + (x * bytesPerPixel);

                actualValue = Color.FromArgb(pPixelData[i + 2], pixelData[i + 1], pixelData[i]);
            }

            Assert.AreEqual(testValue, actualValue);
        }