1

I want to convert a transparent png image to greyscale without losing its transparency.

The problem is the algorithm that I am using in is converting the transparent part into Black, which some picture with black character wouldn't be shown. To give you an idea.

Heres the original picture :

enter image description here

Look what happens when I pass it through the algorithm.

enter image description here

The algorithm :

       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
        {

        }

    }
Joab Santos
  • 512
  • 8
  • 21

1 Answers1

3

You need to pass the alpha value of the original color to get the transparency. Note that if you have partially transparent pixels that will be passed as well.

var corEmEscalaDeCinza = Color.FromArgb(originalColor.A, grayScale, grayScale, grayScale);
juharr
  • 31,741
  • 4
  • 58
  • 93