Създаване на 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 разпределя всички пиксели на изображението с sizeof 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 само битови дълбочини 8 и 16 са разрешени от спецификацията на PNG. Така че да, трябва да използвате PNG_COLOR_TYPE_PALETTE, както каза Андре. - person Glenn Randers-Pehrson; 18.02.2014