[gthumb/gthumb-3-2] fixed saving of TGA images
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb/gthumb-3-2] fixed saving of TGA images
- Date: Fri, 28 Jun 2013 15:56:23 +0000 (UTC)
commit 6f7dca0bf37243adf572185c72007b1a31cc08fe
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Jun 28 15:44:41 2013 +0200
fixed saving of TGA images
save the colors in little ending order
extensions/cairo_io/gth-image-saver-jpeg.c | 2 +-
extensions/cairo_io/gth-image-saver-png.c | 2 +-
extensions/cairo_io/gth-image-saver-tga.c | 2 +-
extensions/cairo_io/gth-image-saver-tiff.c | 2 +-
gthumb/cairo-utils.c | 44 ++++++++++++++++++++++++----
gthumb/cairo-utils.h | 6 +++-
6 files changed, 47 insertions(+), 11 deletions(-)
---
diff --git a/extensions/cairo_io/gth-image-saver-jpeg.c b/extensions/cairo_io/gth-image-saver-jpeg.c
index 2462d09..f746a71 100644
--- a/extensions/cairo_io/gth-image-saver-jpeg.c
+++ b/extensions/cairo_io/gth-image-saver-jpeg.c
@@ -396,7 +396,7 @@ _cairo_surface_write_as_jpeg (cairo_surface_t *image,
/* convert scanline from RGBA to RGB packed */
- _cairo_copy_line_as_rgba (buf, pixels, w, FALSE);
+ _cairo_copy_line_as_rgba_big_endian (buf, pixels, w, FALSE);
/* write scanline */
jbuf = (JSAMPROW *)(&buf);
diff --git a/extensions/cairo_io/gth-image-saver-png.c b/extensions/cairo_io/gth-image-saver-png.c
index 70a071b..665560c 100644
--- a/extensions/cairo_io/gth-image-saver-png.c
+++ b/extensions/cairo_io/gth-image-saver-png.c
@@ -276,7 +276,7 @@ _cairo_surface_write_as_png (cairo_surface_t *image,
buf = g_new (guchar, width * bpp);
ptr = pixels;
for (row = 0; row < height; ++row) {
- _cairo_copy_line_as_rgba (buf, ptr, width, alpha);
+ _cairo_copy_line_as_rgba_big_endian (buf, ptr, width, alpha);
png_write_rows (cairo_png_data->png_ptr, &buf, 1);
ptr += rowstride;
diff --git a/extensions/cairo_io/gth-image-saver-tga.c b/extensions/cairo_io/gth-image-saver-tga.c
index 5e4c781..3b27fe9 100644
--- a/extensions/cairo_io/gth-image-saver-tga.c
+++ b/extensions/cairo_io/gth-image-saver-tga.c
@@ -260,7 +260,7 @@ _cairo_surface_write_as_tga (cairo_surface_t *image,
ptr = pixels;
for (row = 0; row < height; ++row) {
- _cairo_copy_line_as_rgba (buf, ptr, width, alpha);
+ _cairo_copy_line_as_rgba_little_endian (buf, ptr, width, alpha);
if (rle_compression)
rle_write (buffer_data, buf, width, out_bpp, error);
diff --git a/extensions/cairo_io/gth-image-saver-tiff.c b/extensions/cairo_io/gth-image-saver-tiff.c
index ad35967..1aa39da 100644
--- a/extensions/cairo_io/gth-image-saver-tiff.c
+++ b/extensions/cairo_io/gth-image-saver-tiff.c
@@ -439,7 +439,7 @@ _cairo_surface_write_as_tiff (cairo_surface_t *image,
/* Now write the TIFF data. */
ptr = pixels;
for (row = 0; row < rows; row++) {
- _cairo_copy_line_as_rgba (buf, ptr, cols, alpha);
+ _cairo_copy_line_as_rgba_big_endian (buf, ptr, cols, alpha);
if (TIFFWriteScanline (tif, buf, row, 0) < 0) {
g_set_error (error,
GDK_PIXBUF_ERROR,
diff --git a/gthumb/cairo-utils.c b/gthumb/cairo-utils.c
index de9a1e0..e900de0 100644
--- a/gthumb/cairo-utils.c
+++ b/gthumb/cairo-utils.c
@@ -576,10 +576,10 @@ _cairo_image_surface_color_shift (cairo_surface_t *image,
void
-_cairo_copy_line_as_rgba (guchar *dest,
- guchar *src,
- guint width,
- guint alpha)
+_cairo_copy_line_as_rgba_big_endian (guchar *dest,
+ guchar *src,
+ guint width,
+ guint alpha)
{
guint x;
@@ -593,9 +593,41 @@ _cairo_copy_line_as_rgba (guchar *dest,
}
else {
for (x = 0; x < width; x++) {
- dest[0] = src[CAIRO_RED];
+ CAIRO_GET_RGB (src, dest[0], dest[1], dest[2]);
+
+ src += 4;
+ dest += 3;
+ }
+ }
+}
+
+
+void
+_cairo_copy_line_as_rgba_little_endian (guchar *dest,
+ guchar *src,
+ guint width,
+ guint alpha)
+{
+ guint x;
+
+ if (alpha) {
+ int r, g, b, a;
+ for (x = 0; x < width; x++) {
+ CAIRO_GET_RGBA (src, r, g, b, a);
+ dest[0] = b;
+ dest[1] = g;
+ dest[2] = r;
+ dest[3] = a;
+
+ src += 4;
+ dest += 4;
+ }
+ }
+ else {
+ for (x = 0; x < width; x++) {
+ dest[0] = src[CAIRO_BLUE];
dest[1] = src[CAIRO_GREEN];
- dest[2] = src[CAIRO_BLUE];
+ dest[2] = src[CAIRO_RED];
src += 4;
dest += 3;
diff --git a/gthumb/cairo-utils.h b/gthumb/cairo-utils.h
index 92e3dad..84889d2 100644
--- a/gthumb/cairo-utils.h
+++ b/gthumb/cairo-utils.h
@@ -175,7 +175,11 @@ cairo_surface_t * _cairo_image_surface_transform (cairo_surface_t
GthTransform transform);
cairo_surface_t * _cairo_image_surface_color_shift (cairo_surface_t *image,
int shift);
-void _cairo_copy_line_as_rgba (guchar *dest,
+void _cairo_copy_line_as_rgba_big_endian (guchar *dest,
+ guchar *src,
+ guint width,
+ guint alpha);
+void _cairo_copy_line_as_rgba_little_endian (guchar *dest,
guchar *src,
guint width,
guint alpha);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]