Создание и запись палитры RGBA PNG с использованием NSImage

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

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

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

libpng error: Invalid bit depth for RGBA image

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


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

1 ответ

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

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

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

Другие вопросы по тегам