Создание и запись палитры RGBA PNG с использованием NSImage - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь создать изображение с палитрой PNG (8 бит на пиксель), использующее палитру RGBA (32 бит на запись палитры), используя инфраструктуру Какао *.

I 'Мы попробовали несколько комбинаций для метода [NSBitmapImageRep initWithBitmapDataPlanes:…].Кажется, он создает соответствующее растровое изображение для bitsPerSample:2 bitsPerPixel:8.

Однако, когда я пытаюсь написать такое растровое изображение с [NSBitmapImageRep representationUsingType:NSPNGFileType…], я получаю:

libpng error: Invalid bit depth for RGBA image

Если я пробую другой битглубины, тогда я получаю 32-битное изображение на пиксель (без палитры).


*) Я знаю, что могу просто использовать libpng, но это не тот ответ, который я ищу.

1 Ответ

2 голосов
/ 07 февраля 2011

2 бита на семпл, 8 на пиксель не принесут вам индексированный PNG - теоретически он создаст PNG-файл RGBA с 2 битами на семпл, как и предполагалось.Теперь у такого изображения есть 256 возможных значений цвета на пиксель (включая альфа-канал), но оно не индексируется в смысле наличия таблицы соответствия цветов.

Насколько мне известно, невозможно указать цветовую палитрупри использовании NSBitmapImageRep.Вам, вероятно, придется использовать libpng напрямую, чтобы получить желаемый эффект.(Кстати, это не имеет значения, если вы не ищете этот ответ. Это по-прежнему правильный ответ на эту конкретную проблему, и сказать «нет!» Не изменит вселенную вокруг вас.)

Однако, прежде чем вы это сделаете, если вы сообщите нам почему вы думаете / знаете, что вам нужен индексированный PNG, мы можем указать вам на лучшее или более простое решение.

...