[gthumb] fixed saving of TGA files
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] fixed saving of TGA files
- Date: Sun, 30 Jun 2013 08:40:33 +0000 (UTC)
commit f41d9ef9058229d837593ec7efce689c95f23b6c
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Jun 27 19:48:26 2013 +0200
fixed saving of TGA files
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 aeb1d59..d9aac8a 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 b30143e..22e216f 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 fd5e011..268ee71 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 05cffad..d615417 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 dba6c43..651c72e 100644
--- a/gthumb/cairo-utils.c
+++ b/gthumb/cairo-utils.c
@@ -586,10 +586,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;
@@ -603,9 +603,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 9eb4e94..82c1d2d 100644
--- a/gthumb/cairo-utils.h
+++ b/gthumb/cairo-utils.h
@@ -181,7 +181,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]