Joab Santos
Joab Santos

Reputation: 522

How to convert a PNG image to grayscale and without losing the transparency C#

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
        {

        }

    }

Upvotes: 1

Views: 2092

Answers (1)

juharr
juharr

Reputation: 32296

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);

Upvotes: 3

Related Questions