2017-07-21 8 views
0

透過性を失うことなく透明なpng画像をグレースケールに変換したいと考えています。PNG画像をグレースケールに変換する方法と透明性を失うことなくC#

問題は、私が使用しているアルゴリズムが透明部分を黒に変換していることです。黒の文字を含む画像は表示されません。アイデアを伝える。

相続人は、元の画像:

enter image description here

は、私は、アルゴリズムを通してそれを渡すときに何が起こるか見て。

enter image description here

アルゴリズム:

 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

透明度を決定するアルファ値を無視しています。それを新しい色に渡すだけです。 – juharr

+0

どうすればいいですか? – joab

+0

4つの引数を取るFromArgbオーバーロードを使用します。 –

答えて

1

あなたは、透明性を得るために、元の色のアルファ値を渡す必要があります。部分的に透明なピクセルがある場合は、同様に渡されることに注意してください。

​​
関連する問題