c# - 如何将PNG图像转换为灰度而不丢失透明度C#

标签 c# algorithm png

我想将透明的 png 图像转换为灰度而不失去其透明度。

问题是我使用的算法是将透明部分转换为黑色,一些带有黑色字符的图片不会显示。给你一个想法。

这里是原图:

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
        {

        }

    }

最佳答案

需要传递原始颜色的alpha值来获取透明度。请注意,如果您有部分透明的像素,它们也会通过。

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

关于c# - 如何将PNG图像转换为灰度而不丢失透明度C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45242964/

相关文章:

c# - 访问通用对象的非通用成员

c# - 为什么这段代码似乎有错误?

algorithm - 大O算法-排序

c - 使用 GDI 将 HBITMAP 保存为 PNG 图像?

r - 直接从URL加载PNG文件

Java - 如何结合 mp3 与 jpg/png/

c# - 自定义用户控件事件

c# - 有没有办法重用 Google.Apis.Auth.OAuth2.UserCredential 对象来授权 SpreadsheetsService?

algorithm - 寻找高效行程的算法

c# - 使用 Goertzel 算法获取频域