问题
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 :
Look what happens when I pass it through the algorithm.
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
{
}
}
回答1:
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);
来源:https://stackoverflow.com/questions/45242964/how-to-convert-a-png-image-to-grayscale-and-without-losing-the-transparency-c-sh