Mono 2.8.2 и зареждане на PNG файлове

Правя проект, който добавя и умножава множество слоеве от PNG и генерирани Bitmap обекти един към друг в Mono 2.8.2.

Имам проблем, при който пикселите, които се зареждат от 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.

Благодаря!


person andrew    schedule 31.03.2011    source източник


Отговори (1)


Току-що намерих това: https://bugzilla.novell.com/show_bug.cgi?id=679242. Очевидно има отворен доклад за грешка за този проблем.

Междувременно всеки PNG, който е предимно бял с алфа, може да бъде обърнат в програма за редактиране на изображения (така че е предимно черен), зареден и преинвертиран в кода. Болка в задника, но подходящо решение, освен ако вашият PNG не съдържа бели и черни алфа стойности или не дай си боже цветове.

РЕДАКТИРАНЕ: по-добър начин е просто да размножите стойностите на цвета, както е посочено в доклада за грешка (имайте предвид, че това работи само ако алфата е различна от нула):

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

Това може да се тества чрез създаване на бял PNG с един пиксел с алфа стойност 150 (или нещо такова). Заредете изображението и тествайте неговия един пиксел за стойност на r/g/b по-малка от 255. Ако бъде намерена, умножете всички алфа стойности за ВСИЧКИ заредени PNG. Ако не бъде намерен, заредете вашите PNG файлове нормално (няма нужда от коригиране). По този начин, дори ако моно грешката е коригирана, манипулирането на вашето изображение няма да се промени или да се повреди по никакъв начин.

person andrew    schedule 06.04.2011