2011-03-31 51 views
2

我正在做一個項目,在Mono 2.8.2中添加並乘以多層PNG和生成的位圖對象。單聲道2.8.2和加載PNG文件

我遇到了一個問題,從PNG加載的像素是(253,252,252,153)(RGBA)(151,151,151,153)。這是沒有對PNG的修改,只需加載它並在打印出像素時在x/y座標上循環。它看起來像拉動了正確的阿爾法,但不是正確的顏色值。

編輯 - 這是我與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。

謝謝!

回答

0

剛發現這個:https://bugzilla.novell.com/show_bug.cgi?id=679242。顯然這個問題有一個開放的bug報告。

在此期間,任何大多數情況下帶有alpha的白色PNG都可以在圖像編輯程序中反轉(因此它大部分是黑色的),加載並在代碼中重新反轉。屁股疼痛,但一個合適的解決方法,除非你的PNG包含白色和黑色阿爾法值,或上帝禁止的顏色。

編輯:更好的方法是隻unmultiply的顏色值,如在錯誤報告(注意,這僅適用於如果alpha是非零):

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

這可以通過創建測試一個alpha值爲150(或某物)的白色單像素PNG。加載圖像,並測試其一個像素的r/g/b值小於255.如果找到,請取消所有加載的PNG的所有alpha值。如果找不到,請正常加載您的PNG(無需修復)。這樣,即使單聲道錯誤被修復,您的圖像處理也不會以任何方式改變或破壞。