Domanda

Sto cercando di ottenere un'immagine da visualizzare con uno dei colori sostituiti con un alfa bianco in modo che io possa strato in cima altre immagini. Ce l'ho in modo che posso cambiare i colori abbastanza facilmente, ma cambiare per essere trasparente mi sta sfuggendo. Ecco il mio codice, utilizzando 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);
        }

    }

Ho due immagini che sto testando questo con. Image1 è come quello che ho intenzione di essere al lavoro su, nessuna trasparenza nell'immagine originale. Image2 ha già trasparenza. Ho pensato che sarebbe stato facile basta afferrare il valore da image2 (0x00FFFFFF), ma che appena lo rende bianco e copre eventuali immagini dietro.

Entrambe le immagini sono PNG e il formato per entrambi è Bgr32.

Qualcuno sa come ottenere l'immagine di essere trasparenti?

È stato utile?

Soluzione

Come sull'utilizzo Bgra32 ?

Inoltre assicuratevi di capire come il colore viene rappresentato in memoria e quali alfa mezzi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top