Создание изображений PNG с глубиной цвета 2 бита с помощью Libpng

Я хотел бы создавать изображения PNG с глубиной 1 бит (2 цвета) или 2 бита (4 цвета) с библиотекой Libpng.

Кто нибудь знает как это сделать ? Я тестировал примеры, и все они работают с 8-битной глубиной цвета?

Я знаю png_set_IHDR, но в примере, который я тестирую, когда я изменяю параметр глубины в png_set_IHDR с 8 на 2 или 1, моя программа рисует один пиксель размером 2 или 4. Я думаю, это связано с распределением памяти, созданным с помощью функции png_malloc.

В примере я пытаюсь изменить (http://www.lemoda.net/c/write-png/), функция png_malloc выделяет все пиксели изображения размером uint8_t.

png_malloc (png_ptr, sizeof (uint8_t) * bitmap->width * pixel_size);

Можете ли вы сказать мне, как выделить 1-битные или 2-битные пиксели?

Спасибо, Jo2s


person jo2s    schedule 14.02.2013    source источник
comment
Это делается непосредственно с помощью png_set_IHDR с битовой глубиной 1 или 2. Что еще вам нужно?   -  person mmgp    schedule 15.02.2013


Ответы (1)


В png_set_IHDR параметр bit_depth устанавливает битовую глубину всех компонентов цвета. Вместе с PNG_COLOR_TYPE_RGB вы получаете один бит для красного компонента, один для зеленого и один для синего.

Вы должны вызвать png_set_IHDR с PNG_COLOR_TYPE_PALETTE, а затем, если bit_depth равен единице, у вас должна быть палитра с двумя цветами (0 и 1), а если bit_depth равна 2, одна с четырьмя цветами (от 0 до 3).

person André Leiradella    schedule 22.05.2013
comment
Для PNG_COLOR_TYPE_RGB спецификацией PNG разрешена только битовая глубина 8 и 16. Так что да, вы должны использовать PNG_COLOR_TYPE_PALETTE, как сказал Андре. - person Glenn Randers-Pehrson; 18.02.2014