J'essaie d'obtenir une image à afficher avec l'une des couleurs remplacée par un alpha blanc afin que je puisse la superposer au-dessus des autres images. Je l'ai pour que je puisse changer les couleurs assez facilement, mais le changer pour être transparent m'élude. Voici mon code, en utilisant C# et WPF.Utilisation de l'alpha dans la manipulation d'images
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);
}
}
J'ai deux images avec lesquelles je suis en train de tester. Image1 est comme ce sur quoi je vais travailler, pas de transparence dans l'image originale. Image2 a déjà de la transparence. Je pensais que ce serait facile de saisir la valeur de image2 (0x00ffffff) mais cela la rendrait blanche et couvrirait toutes les images derrière.
Les deux images sont png, et le format pour les deux est Bgr32.
Est-ce que quelqu'un sait comment rendre l'image transparente?
Merci! Modification de bmp = BitmapSource.Create (bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette, pixels, stride); à bmp = BitmapSource.Create (bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette, pixels, foulée); l'a corrigé. Y a-t-il quelque chose que je fasse avec les couleurs qui vous rendent nerveux? – Califer
Non ... c'est plutôt bien. J'essayais juste de m'assurer que vous compreniez ce que vous faites, pas seulement prendre des trucs d'un tutoriel :) –
Oups, je n'ai pas réellement posté le correctif: P Le deuxième bmp.Format devrait être 'System.Windows.Media. PixelFormats.Bgra32 'à la place. – Califer