2009-08-31 4 views
2

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?

Répondre

3

Comment utiliser Bgra32?

Assurez-vous également que vous comprenez comment la couleur est représentée en mémoire et ce que signifie alpha.

+0

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

+0

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 :) –

+0

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

Questions connexes