Установка альфа-значений для Format32bppArgb - PullRequest
0 голосов
/ 11 мая 2011

Я пытался установить альфа-значения вручную для растрового изображения в формате Format32bppArgb.В этом примере кода я устанавливаю их все на 0,5f, однако в будущем они будут иметь разные значения, а не на все 0,5f / 128 (так как это мой тестовый пример, чтобы это работало).Как правильно установить альфа-значения для растрового изображения?Я мог бы использовать SetPixel (), однако SetPixel () ужасно медленен для больших изображений по сравнению с простой блокировкой / разблокировкой растрового изображения.

        Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
        System.Drawing.Imaging.BitmapData bmpData =
            bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
            bmp.PixelFormat);

        // Get the address of the first line.
        IntPtr ptr = bmpData.Scan0;

        // Declare an array to hold the bytes of the bitmap.
        int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
        byte[] rgbValues = new byte[bytes];

        // Copy the RGB values into the array.
        System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

        for (int counter = 0; counter < rgbValues.Length; counter += 4)
        {
            rgbValues[counter] = 255;
            rgbValues[counter + 1] = 255;
            rgbValues[counter + 2] = 255;
            rgbValues[counter + 3] = 128;
        }

        // Copy the RGB values back to the bitmap
        System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);

        // Unlock the bits.
        bmp.UnlockBits(bmpData);

1 Ответ

1 голос
/ 12 мая 2011

Лучший способ сделать это, при условии, что вы хотите иметь одинаковое альфа-значение на всем растровом изображении, - это использовать ColorMatrix.Посмотрите этот пример от Microsoft:

http://msdn.microsoft.com/en-us/library/w177ax15(v=vs.71).aspx

...