Читать 16-битный PNG с использованием libpng

Мне нужно прочитать 16-битные изображения PNG в C ++ с libpng.

Я получил код, работающий на 8 бит, но я не могу найти решение, чтобы заставить его работать на 16 бит PNG.

Фрагмент кода для чтения 8 бит выглядит в основном так (принято из Вот):

png_byte color_type;
png_byte bit_depth;
png_bytep *row_pointers;
int rowbytes = png_get_rowbytes(png_ptr, info_ptr);

row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height);
for (int y = 0; y<height; y++)
row_pointers[y] = (png_byte*)malloc(png_get_rowbytes(png_ptr, info_ptr));

png_read_image(png_ptr, row_pointers);

Если я использую этот код, 16-битное изображение читается неправильно. Я думаю, что это происходит потому, что png_bytep содержит только 8-битные значения.

Поэтому я попытался объявить указатели строк как png_uint_16 заменив png_bytep с png_uint16p, Фрагмент кода сверху будет выглядеть так:

png_byte color_type;
png_byte bit_depth;
png_uint_16p *row_pointers;
int rowbytes = png_get_rowbytes(png_ptr, info_ptr);

row_pointers = (png_uint_16p*)malloc(sizeof(png_uint_16p) * height);
for (int y = 0; y<height; y++)
row_pointers[y] = (png_uint_16*)malloc(png_get_rowbytes(png_ptr, info_ptr));

png_read_image(png_ptr, row_pointers);

Однако проблема в том, что функция png_read_image требует png_bytep в качестве ввода, который, насколько мне известно, только 8-разрядный. Но разве нет способа прочитать 16-битное изображение с помощью libpng?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]