From bfd02e4db3863ed62bb017982b1afb10bf695ea6 Mon Sep 17 00:00:00 2001 From: Maurits Rijk Date: Fri, 10 Jan 2003 13:59:41 +0000 Subject: [PATCH] Fix for #96611 --- ChangeLog | 5 ++++ plug-ins/common/tiff.c | 68 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 68 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index a17899235f..cd68c4c76d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-01-10 Maurits Rijk + + * plug-ins/common/tiff.c (load_image): added handling of + TIFFTAG_ORIENTATION tag (fixes #96611). + 2003-01-10 Michael Natterer * app/tools/gimpvectortool.c (gimp_vector_tool_button_press): diff --git a/plug-ins/common/tiff.c b/plug-ins/common/tiff.c index 3b871dfb92..60f3889b60 100644 --- a/plug-ins/common/tiff.c +++ b/plug-ins/common/tiff.c @@ -431,6 +431,8 @@ load_image (gchar *filename) guchar *icc_profile; #endif + guint16 orientation; + gimp_rgb_set (&color, 0.0, 0.0, 0.0); TIFFSetWarningHandler (tiff_warning); @@ -685,6 +687,62 @@ load_image (gchar *filename) load_lines (tif, channel, bps, photomet, alpha, extra); } + if (TIFFGetField (tif, TIFFTAG_ORIENTATION, &orientation)) { + GimpParam *return_vals; + int nreturn_vals; + gint32 drawable_ID; + gboolean flip_horizontal; + gboolean flip_vertical; + + drawable_ID = gimp_image_active_drawable (image); + + switch (orientation) + { + case ORIENTATION_TOPLEFT: + flip_horizontal = FALSE; + flip_vertical = FALSE; + break; + case ORIENTATION_TOPRIGHT: + flip_horizontal = TRUE; + flip_vertical = FALSE; + break; + case ORIENTATION_BOTRIGHT: + flip_horizontal = TRUE; + flip_vertical = TRUE; + break; + case ORIENTATION_BOTLEFT: + flip_horizontal = FALSE; + flip_vertical = TRUE; + break; + default: + flip_horizontal = FALSE; + flip_vertical = FALSE; + printf("Orientation %d not handled yet!\n", orientation); + break; + } + + gimp_image_undo_disable(image); + if (flip_horizontal) + { + return_vals = gimp_run_procedure("gimp_flip", + &nreturn_vals, + GIMP_PDB_DRAWABLE, drawable_ID, + GIMP_PDB_INT32, 0, + GIMP_PDB_END); + gimp_destroy_params(return_vals, nreturn_vals); + } + if (flip_vertical) + { + return_vals = gimp_run_procedure("gimp_flip", + &nreturn_vals, + GIMP_PDB_DRAWABLE, drawable_ID, + GIMP_PDB_INT32, 1, + GIMP_PDB_END); + gimp_destroy_params(return_vals, nreturn_vals); + } + gimp_image_undo_enable(image); + } + for (i= 0; !worst_case && i < extra; ++i) { gimp_drawable_flush (channel[i].drawable); gimp_drawable_detach (channel[i].drawable); @@ -1607,19 +1665,19 @@ save_dialog (void) &tsvals.compression, GINT_TO_POINTER (tsvals.compression), - _("None"), + _("_None"), GINT_TO_POINTER (COMPRESSION_NONE), NULL, - _("LZW"), + _("_LZW"), GINT_TO_POINTER (COMPRESSION_LZW), NULL, - _("Pack Bits"), + _("_Pack Bits"), GINT_TO_POINTER (COMPRESSION_PACKBITS), NULL, - _("Deflate"), + _("_Deflate"), GINT_TO_POINTER (COMPRESSION_DEFLATE), NULL, - _("JPEG"), + _("_JPEG"), GINT_TO_POINTER (COMPRESSION_JPEG), NULL, NULL);