Utilizzando Alpha manipolazione dell'immagine
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?