Mono 2.8.2 и загрузка файлов PNG - PullRequest
2 голосов
/ 01 апреля 2011

Я делаю проект, который добавляет и умножает несколько слоев PNG и сгенерированных растровых объектов друг к другу в 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.

Спасибо!

1 Ответ

0 голосов
/ 06 апреля 2011

Только что нашел: 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 как обычно (исправлять не нужно). Таким образом, даже если монобаг исправлен, ваши манипуляции с изображениями не изменятся и не прекратятся.

...