gdk_pixbuf__png_image_save: removed wrong endian conversion stuff; don't
2001-12-11 Michael Natterer <mitch@gimp.org> * io-png.c: gdk_pixbuf__png_image_save: removed wrong endian conversion stuff; don't copy RGB pixbufs' lines around before saving them.
This commit is contained in:
committed by
Michael Natterer
parent
8157885492
commit
3339931f8f
@ -1,3 +1,9 @@
|
|||||||
|
2001-12-11 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
|
* io-png.c: gdk_pixbuf__png_image_save: removed wrong endian
|
||||||
|
conversion stuff; don't copy RGB pixbufs' lines around before
|
||||||
|
saving them.
|
||||||
|
|
||||||
2001-12-05 Matthias Clasen <matthiasc@poet.de>
|
2001-12-05 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* gdk-pixbuf.h (gdk_pixbuf_ref, gdk_pixbuf_unref,
|
* gdk-pixbuf.h (gdk_pixbuf_ref, gdk_pixbuf_unref,
|
||||||
|
|||||||
@ -720,10 +720,9 @@ gdk_pixbuf__png_image_save (FILE *f,
|
|||||||
png_textp text_ptr = NULL;
|
png_textp text_ptr = NULL;
|
||||||
guchar *ptr;
|
guchar *ptr;
|
||||||
guchar *pixels;
|
guchar *pixels;
|
||||||
int x, y;
|
int y;
|
||||||
int i, j;
|
int i;
|
||||||
png_bytep row_ptr;
|
png_bytep row_ptr;
|
||||||
png_bytep data;
|
|
||||||
png_color_8 sig_bit;
|
png_color_8 sig_bit;
|
||||||
int w, h, rowstride;
|
int w, h, rowstride;
|
||||||
int has_alpha;
|
int has_alpha;
|
||||||
@ -787,8 +786,6 @@ gdk_pixbuf__png_image_save (FILE *f,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data = NULL;
|
|
||||||
|
|
||||||
bpc = gdk_pixbuf_get_bits_per_sample (pixbuf);
|
bpc = gdk_pixbuf_get_bits_per_sample (pixbuf);
|
||||||
w = gdk_pixbuf_get_width (pixbuf);
|
w = gdk_pixbuf_get_width (pixbuf);
|
||||||
h = gdk_pixbuf_get_height (pixbuf);
|
h = gdk_pixbuf_get_height (pixbuf);
|
||||||
@ -823,30 +820,10 @@ gdk_pixbuf__png_image_save (FILE *f,
|
|||||||
png_set_IHDR (png_ptr, info_ptr, w, h, bpc,
|
png_set_IHDR (png_ptr, info_ptr, w, h, bpc,
|
||||||
PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE,
|
PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE,
|
||||||
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
png_set_swap_alpha (png_ptr);
|
|
||||||
#else
|
|
||||||
png_set_bgr (png_ptr);
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
png_set_IHDR (png_ptr, info_ptr, w, h, bpc,
|
png_set_IHDR (png_ptr, info_ptr, w, h, bpc,
|
||||||
PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
|
PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
|
||||||
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||||
data = g_try_malloc (w * 3 * sizeof (char));
|
|
||||||
|
|
||||||
if (data == NULL) {
|
|
||||||
/* Check error NULL, normally this would be broken,
|
|
||||||
* but libpng makes me want to code defensively.
|
|
||||||
*/
|
|
||||||
if (error && *error == NULL) {
|
|
||||||
g_set_error (error,
|
|
||||||
GDK_PIXBUF_ERROR,
|
|
||||||
GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY,
|
|
||||||
_("Insufficient memory to save PNG file"));
|
|
||||||
}
|
|
||||||
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sig_bit.red = bpc;
|
sig_bit.red = bpc;
|
||||||
sig_bit.green = bpc;
|
sig_bit.green = bpc;
|
||||||
@ -859,21 +836,11 @@ gdk_pixbuf__png_image_save (FILE *f,
|
|||||||
|
|
||||||
ptr = pixels;
|
ptr = pixels;
|
||||||
for (y = 0; y < h; y++) {
|
for (y = 0; y < h; y++) {
|
||||||
if (has_alpha)
|
|
||||||
row_ptr = (png_bytep)ptr;
|
row_ptr = (png_bytep)ptr;
|
||||||
else {
|
|
||||||
for (j = 0, x = 0; x < w; x++)
|
|
||||||
memcpy (&(data[x*3]), &(ptr[x*3]), 3);
|
|
||||||
|
|
||||||
row_ptr = (png_bytep)data;
|
|
||||||
}
|
|
||||||
png_write_rows (png_ptr, &row_ptr, 1);
|
png_write_rows (png_ptr, &row_ptr, 1);
|
||||||
ptr += rowstride;
|
ptr += rowstride;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data)
|
|
||||||
g_free (data);
|
|
||||||
|
|
||||||
png_write_end (png_ptr, info_ptr);
|
png_write_end (png_ptr, info_ptr);
|
||||||
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user