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?

¿Fue útil?

Solución

¿Y si uso Bgra32 ?

También asegúrese de que entiende cómo el color se representa en la memoria y lo alfa medios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top