Pergunta

Estou tentando obter uma imagem para exibir com uma das cores substituídas por um alfa branco para que eu possa colocá -la em cima de outras imagens. Eu tenho para que eu possa mudar de cor com bastante facilidade, mas mudar para ser transparente está me iludindo. Aqui está o meu código, usando C# e 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);
        }

    }

Eu tenho duas imagens com as quais estou testando isso. Image1 é como o que vou trabalhar, sem transparência na imagem original. Image2 já tem transparência. Eu pensei que seria fácil apenas pegar o valor do Image2 (0x00FFFFFF), mas isso apenas o torna branco e cobre todas as imagens.

Ambas as imagens são PNG e o formato para ambos é BGR32.

Alguém sabe como fazer com que a imagem seja transparente?

Foi útil?

Solução

Que tal usar Bgra32?

Também certifique -se de entender como a cor é representada na memória e o que alfa significa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top