单声道2.8.2并加载PNG文件

时间:2011-03-31 23:18:40

标签: c# image-processing mono png

我正在做一个项目,在Mono 2.8.2中添加和增加多层PNG并相互生成Bitmap对象。

我遇到的问题是,从PNG加载的像素(253,252,252,153)(RGBA)将作为(151,151,151,153)进入。这是对PNG进行 no 修改,只需加载它并在打印出像素时在x / y坐标上循环。看起来它正在拉动正确的alpha值,但不是正确的颜色值。

编辑 - 这是我正在使用http://i.stack.imgur.com/Gr21x.png

的图像

这或多或少是我正在做的事情:

Bitmap cover = new Bitmap("test.png");
for(int x = 0; x < cover.Width; x++)
{
    for(int y = 0; y < cover.Height; y++)
    {
        Color pixel = cover.GetPixel(x, y);
        Console.WriteLine("{0}x{1}: {2} {3} {4} {5}", x, y, pixel.R, pixel.G, pixel.B, pixel.A)
    }
}

我已经验证了我在GIMP中检查的值。有什么想法吗?我正在开发Linux,Mono 2.8.2,libgdiplus-2.10。

谢谢!

1 个答案:

答案 0 :(得分:0)

刚刚发现:https://bugzilla.novell.com/show_bug.cgi?id=679242。显然有一个针对这个问题的开放式错误报告。

在此期间,任何大多数带有alpha白色的PNG都可以在图像编辑程序中反转(因此它主要是黑色),加载并在代码中重新反转。除非你的PNG包含白色和黑色alpha值,或者上帝禁止的颜色,否则屁股会很痛苦,但这是一种合适的解决方法。

编辑:更好的方法是将颜色值不成倍增,如错误报告中所述(注意这仅在alpha为非零时才有效):

r|g|b *= 255.0 / (double)alpha;

可以通过创建alpha值为150(或某事物)的白色单像素PNG来测试。加载图像,并测试其一个像素的r / g / b值小于255.如果找到,则取消所有加载的PNG的所有alpha值。如果找不到,请正常加载PNG(无需修复)。这样即使修复了单声道错误,您的图像处理也不会以任何方式改变或中断。