Я пытаюсь написать 16-битное RGB-изображение, используя libpng на c ++. Я сделал следующее
.....
FILE* fp = fopen(path, "wb");
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
info_ptr = png_create_info_struct(png_ptr);
png_init_io(png_ptr, fp);
png_set_IHDR( png_ptr,
info_ptr,
width,
height,
16,
PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
png_write_info(png_ptr, info_ptr);
png_set_swap(png_ptr);
bytep row = (png_bytep)malloc(6 * width * sizeof(png_byte));
for(int y = 0; y < height; y++){
for(int x = 0; x <width; x++){
set_rgb(&(row[x * 3]), array[y]);
}
png_write_row(png_ptr, row);
}
.....
, где массив является конгломератными значениями с плавающей точкой RGB, и set_rgb()
Я делаю
void set_normal_rgb(png_byte* ptr, and array...) {
ptr[0] = array[0];
ptr[1] = array[1];
ptr[2] = array[2];
}
Однако, изображение будет выглядеть примерно так
полученное изображение Где все правильное изображение сдавлено до левой половины, а правая половина - просто какой-то случайный шум. Я знаю, что я не назначаю пиксели правильно, и что каждый пиксель должен быть 6 байтов. Пробовал читать API, но все еще не ясно, как правильно назначить отдельные пиксели в 16-битном RGB-изображении.
Заранее спасибо.