首先,我会解释我尝试做什么,只是在有人提出更好的方法的情况下 我需要使用来自photoshop的“颜色”阶梯混合太多图像(你知道,混合方法:屏幕,强光,颜色......)
所以,我有我的基本图像(png)和执行时生成的WriteableBitmap(让我们称之为颜色掩码)。然后我需要使用“颜色”方法混合这两个图像,并在UI组件中显示结果。
到目前为止,我尝试的只是在WriteableBitmap上绘制内容,但我面临着alpha通道的意外行为。
到目前为止我的代码:
// variables declaration
WriteableBitmap img = new WriteableBitmap(width, height, 96,96,PixelFormats.Bgra32,null);
pixels = new uint[width * height];
//function for setting the color of one pixel
private void SetPixel(int x, int y, Color c)
{
int pixel = width * y + x;
int red = c.R;
int green = c.G;
int blue = c.B;
int alpha = c.A;
pixels[pixel] = (uint)((blue << 24) + (green << 16) + (red << 8) + alpha);
}
//function for paint all the pixels of the image
private void Render()
{
Color c = new Color();
c.R = 255; c.G = 255; c.B = 255; c.A = 50;
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
SetPixel(x, y, c);
img.WritePixels(new Int32Rect(0, 0, width, height), pixels, width * 4, 0);
image1.Source = img; // image1 is a WPF Image in my XAML
}
每当我运行颜色为c.A = 255的代码时,我都会得到预期的结果。整个图像设置为所需的颜色。但是,如果我将c.A设置为不同的值,我会得到奇怪的东西。 如果我将颜色设置为BRGA = 0,0,255,50,我会得到一个近乎黑色的深蓝色。如果我将它设置为BRGA = 255,255,255,50,我会得到一个黄色......
任何线索!?!?!
提前致谢!
答案 0 :(得分:2)
将颜色分量的顺序更改为
pixels[pixel] = (uint)((alpha << 24) + (red << 16) + (green << 8) + blue);