El uso de Alfa en la manipulación de imágenes
Pregunta
Estoy tratando de conseguir una imagen para mostrar con uno de los colores reemplazados con un alfa blanco para que pueda colocarlo en la capa en la parte superior de otras imágenes. Tengo que para que pueda cambiar de color con bastante facilidad, pero cambiando que sea transparente me está eludiendo. Aquí está mi código, usando C # y 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);
}
}
Tengo dos imágenes que estoy probando con este. Imagen1 es como lo que voy a estar trabajando, no hay transparencia en la imagen original. Imagen2 ya tiene transparencia. Pensé que sería fácil que la puede llevar el valor de imagen2 (0x00FFFFFF), sino que sólo lo hace en blanco y cubre hasta cualquier imagen detrás.
Las dos imágenes son png, y el formato para ambos es Bgr32.
¿Alguien sabe cómo conseguir que la imagen sea transparente?