Save_PNG_Sub(): fix PNG saving

see http://pulkomandy.tk/projects/GrafX2/ticket/96
This commit is contained in:
Thomas Bernard 2019-01-20 23:54:30 +01:00
parent 8ebe6a8867
commit 119618ae14
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C

View File

@ -6798,6 +6798,7 @@ void Save_PNG_Sub(T_IO_Context * context, FILE * file, char * * buffer, unsigned
byte cycle_data[16*6]; // Storage for color-cycling data, referenced by crng_chunk
struct PNG_memory_buffer memory_buffer;
memset(&memory_buffer, 0, sizeof(memory_buffer));
/* initialisation */
if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL))
&& (info_ptr = png_create_info_struct(png_ptr)))
@ -6806,14 +6807,10 @@ void Save_PNG_Sub(T_IO_Context * context, FILE * file, char * * buffer, unsigned
{
if (file != NULL)
png_init_io(png_ptr, file);
else
{
// to write to memory, use png_set_write_fn() instead of calling png_init_io()
memset(&memory_buffer, 0, sizeof(memory_buffer));
else // to write to memory, use png_set_write_fn() instead of calling png_init_io()
png_set_write_fn(png_ptr, &memory_buffer, PNG_memory_write, PNG_memory_flush);
}
/* en-tete */
/* read PNG header */
if (!setjmp(png_jmpbuf(png_ptr)))
{
png_set_IHDR(png_ptr, info_ptr, context->Width, context->Height,
@ -6822,8 +6819,7 @@ void Save_PNG_Sub(T_IO_Context * context, FILE * file, char * * buffer, unsigned
png_set_PLTE(png_ptr, info_ptr, (png_colorp)context->Palette, 256);
{
// Commentaires texte PNG
// Cette partie est optionnelle
// text chunks in PNG (optional)
png_text text_ptr[2] = {
#ifdef PNG_iTXt_SUPPORTED
{-1, "Software", "Grafx2", 6, 0, NULL, NULL},
@ -6960,11 +6956,14 @@ void Save_PNG_Sub(T_IO_Context * context, FILE * file, char * * buffer, unsigned
if (Row_pointers)
free(Row_pointers);
if (memory_buffer.buffer)
if (File_error == 0 && buffer != NULL)
{
*buffer = memory_buffer.buffer;
*buffer_size = memory_buffer.offset;
if (buffer_size != NULL)
*buffer_size = memory_buffer.offset;
}
else
free(memory_buffer.buffer);
}