[gimp] Bug 748487 - Thumbnails sometimes don't render correctly with *.PSD files



commit 3d3f1d6855c1693754c80a49c8628ac861650226
Author: Michael Natterer <mitch gimp org>
Date:   Sun Apr 26 13:31:01 2015 -0400

    Bug 748487 - Thumbnails sometimes don't render correctly with *.PSD files
    
    Using the right Babl format (JPEG previews don't have an alpha
    channel), and fixing the main scanline loading loop (which was totally
    busted) make the PSD previews look like images.

 plug-ins/file-psd/psd-image-res-load.c |   39 +++++++++++++++++--------------
 1 files changed, 21 insertions(+), 18 deletions(-)
---
diff --git a/plug-ins/file-psd/psd-image-res-load.c b/plug-ins/file-psd/psd-image-res-load.c
index 645dd70..4acc37a 100644
--- a/plug-ins/file-psd/psd-image-res-load.c
+++ b/plug-ins/file-psd/psd-image-res-load.c
@@ -1035,7 +1035,7 @@ load_resource_1033 (const PSDimageres  *res_a,
                              cinfo.output_height,
                              GIMP_RGB_IMAGE, 100, GIMP_NORMAL_MODE);
   buffer = gimp_drawable_get_buffer (layer_id);
-  format = babl_format ("R'G'B'A u8");
+  format = babl_format ("R'G'B' u8");
 
   /* Step 6: while (scan lines remain to be read) */
   /*           jpeg_read_scanlines(...); */
@@ -1043,28 +1043,31 @@ load_resource_1033 (const PSDimageres  *res_a,
     {
       jpeg_read_scanlines (&cinfo,
                            (JSAMPARRAY) &rowbuf[cinfo.output_scanline], 1);
+    }
 
-      if (res_a->id == PSD_THUMB_RES)   /* Order is BGR for resource 1033 */
-        {
-          guchar *dst = rgb_buf;
-          guchar *src = buf;
+  if (res_a->id == PSD_THUMB_RES)   /* Order is BGR for resource 1033 */
+    {
+      guchar *dst = rgb_buf;
+      guchar *src = buf;
 
-          for (i = 0; i < gegl_buffer_get_width (buffer) * gegl_buffer_get_height (buffer); ++i)
-            {
-              guchar r, g, b;
-
-              r = *(src++);
-              g = *(src++);
-              b = *(src++);
-              *(dst++) = b;
-              *(dst++) = g;
-              *(dst++) = r;
-            }
+      for (i = 0; i < gegl_buffer_get_width (buffer) * gegl_buffer_get_height (buffer); ++i)
+        {
+          guchar r, g, b;
+
+          r = *(src++);
+          g = *(src++);
+          b = *(src++);
+          *(dst++) = b;
+          *(dst++) = g;
+          *(dst++) = r;
         }
-      gegl_buffer_set (buffer, GEGL_RECTANGLE (0, 0, gegl_buffer_get_width (buffer), gegl_buffer_get_height 
(buffer)),
-                       0, format, rgb_buf ? rgb_buf : buf, GEGL_AUTO_ROWSTRIDE);
     }
 
+  gegl_buffer_set (buffer, GEGL_RECTANGLE (0, 0,
+                                           gegl_buffer_get_width (buffer),
+                                           gegl_buffer_get_height (buffer)),
+                   0, format, rgb_buf ? rgb_buf : buf, GEGL_AUTO_ROWSTRIDE);
+
   /* Step 7: Finish decompression */
   jpeg_finish_decompress (&cinfo);
   /* We can ignore the return value since suspension is not possible


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]