Использование Alpha в манипуляциях с изображениями
Вопрос
Я пытаюсь отобразить изображение, в котором один из цветов заменен белой альфой, чтобы я мог наложить его поверх других изображений.У меня это так, что я могу достаточно легко менять цвета, но сделать его прозрачным ускользает от меня.Вот мой код, использующий C# и WPF.
private void SetAlpha(string location)
{
//bmp is a bitmap source that I load from an image
bmp = new BitmapImage(new Uri(location));
int[] pixels = new int[(int)bmp.Width * (int)bmp.Height];
//still not sure what 'stride' is. Got this part from a tutorial
int stride = (bmp.PixelWidth * bmp.Format.BitsPerPixel + 7)/8;
bmp.CopyPixels(pixels, stride, 0);
int oldColor = pixels[0];
int red = 255;
int green = 255;
int blue = 255;
int alpha = 0;
int color = (alpha << 24) + (red << 16) + (green << 8) + blue;
for (int i = 0; i < (int)bmp.Width * (int)bmp.Height; i++)
{
if (pixels[i] == oldColor)
{
pixels[i] = color;
}
}
//remake the bitmap source with these pixels
bmp = BitmapSource.Create(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette, pixels, stride);
}
}
У меня есть два изображения, с которыми я тестирую это.Изображение1 похоже на то, над чем я собираюсь работать, в исходном изображении нет прозрачности.Image2 уже имеет прозрачность.Я думал, что было бы легко просто получить значение из image2 (0x00ffffff), но это просто сделает его белым и закроет все изображения позади.
Оба изображения имеют формат PNG, формат Bgr32.
Кто-нибудь знает, как сделать изображение прозрачным?
Не связан с StackOverflow