У меня есть некоторое изображение PNG. Я открываю это. Затем я сохраняю его в файл. И когда я пытаюсь открыть сохраненное изображение, у меня проблема. Ошибка libpng: ошибка чтения на png_read_rows
Вот код написания:
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_infop info_ptr = png_create_info_struct(png_ptr);
//created png struct
setjmp(png_jmpbuf(png_ptr))
//signed
png_init_io(png_ptr, file);
png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
//set header
unsigned char * buffer = (unsigned char*)malloc(4 *width * height);
// created buffer
unsigned char ** row_pointers = (unsigned char**) malloc(height * sizeof(unsigned char *)); // created rows pointers
for (int i= 0; i< height ; i++) {
row_pointers[i] = buffer + i * 4 * width;
}
memset(buffer, 255, 4 * height * width); // fill buffer with white image for example.
// **I mean that the same problem is even when i do not write the opened image,
//but just fill it with white**.
png_write_image(png_ptr, row_pointers);
//write data
png_write_end(png_ptr, NULL);
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
Как показано в libpng / example.c, поместите это после png_set_IHDR ():
// Write the file header information. REQUIRED
png_write_info(png_ptr, info_ptr);
Других решений пока нет …