2017-07-21 3 views
0

Je veux convertir une image png transparente en niveaux de gris sans perdre sa transparence.Comment convertir une image PNG en niveaux de gris et sans perdre la transparence C#

Le problème est que l'algorithme que j'utilise est en convertissant la partie transparente en noir, dont une image avec un caractère noir ne serait pas affichée. Pour te donner une idée.

Heres l'image d'origine:

enter image description here

Regardez ce qui se passe quand je passe à travers l'algorithme.

enter image description here

L'algorithme:

 public static void ToWhiteBlack(Bitmap original) 
    { 
     try 
     { 

      for (var i = 0; i < original.Width; i++) 
      { 
       for (var j = 0; j < original.Height; j++) 
       { 
        var originalColor = original.GetPixel(i, j); 
        var grayScale = (int) ((originalColor.R*0.3) + (originalColor.G*0.59) + (originalColor.B*0.11)); 
        var corEmEscalaDeCinza = Color.FromArgb(grayScale, grayScale, grayScale); 
        original.SetPixel(i, j, corEmEscalaDeCinza); 
       } 
      } 
     } 
     catch 
     { 

     } 

    } 
+0

Vous ignorez la valeur alpha qui détermine la transparence. Passez le simplement à la nouvelle couleur. – juharr

+0

Comment feriez-vous cela? – joab

+0

Utilisez la surcharge FromArgb qui prend quatre arguments. –

Répondre

1

Vous devez passer la valeur alpha de la couleur d'origine pour obtenir la transparence. Notez que si vous avez des pixels partiellement transparents qui seront également transmis.

var corEmEscalaDeCinza = Color.FromArgb(originalColor.A, grayScale, grayScale, grayScale);