GraphicsMagick: ReadIdentityImage(): Return a PseudoClass image ...

GraphicsMagick Commits <[email protected]>
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.461.1679871738.6776.graphicsmagick-commit@lists.sourceforge.net>
changeset 11f622f51ff5 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=11f622f51ff5
summary: ReadIdentityImage(): Return a PseudoClass image if possible.

diffstat:

 ChangeLog          |   3 +++
 coders/identity.c  |  28 ++++++++++++++++++++++------
 www/Changelog.html |   2 ++
 3 files changed, 27 insertions(+), 6 deletions(-)

diffs (109 lines):

diff -r 63c1903547d7 -r 11f622f51ff5 ChangeLog
--- a/ChangeLog	Sun Mar 26 16:24:04 2023 -0500
+++ b/ChangeLog	Sun Mar 26 18:02:08 2023 -0500
@@ -1,5 +1,8 @@
 2023-03-26  Bob Friesenhahn  <[email protected]>
 
+	* coders/identity.c (ReadIdentityImage): Return a PseudoClass
+	image if possible.
+
 	* coders/miff.c (ReadMIFFImage): With depth == 32, the range of
 	image->colors is 1 to 65536.
 
diff -r 63c1903547d7 -r 11f622f51ff5 coders/identity.c
--- a/coders/identity.c	Sun Mar 26 16:24:04 2023 -0500
+++ b/coders/identity.c	Sun Mar 26 18:02:08 2023 -0500
@@ -12,6 +12,7 @@
 */
 #include "magick/studio.h"
 #include "magick/blob.h"
+#include "magick/colormap.h"
 #include "magick/pixel_cache.h"
 #include "magick/constitute.h"
 #include "magick/magick.h"
@@ -65,14 +66,12 @@
 
   unsigned long
     cube_size,
-    order;
+    order,
+    row_count=0;
 
   long
     y;
 
-  unsigned long
-    row_count=0;
-
   unsigned int
     status=MagickPass;
 
@@ -97,6 +96,9 @@
   cube_size=order*order;
   image->columns=image->rows=order*order*order;
 
+  if (image->columns*image->rows <= MaxColormapSize)
+    AllocateImageColormap(image,(const unsigned long) image->columns*image->rows);
+
 #if defined(HAVE_OPENMP)
 #  if defined(TUNE_OPENMP)
 #    pragma omp parallel for schedule(runtime) shared(row_count, status)
@@ -112,6 +114,12 @@
       register PixelPacket
         *q;
 
+      register IndexPacket
+        *indexes = (IndexPacket *) NULL;
+
+      register unsigned int
+        index = (unsigned int) y*image->columns;
+
 #if defined(HAVE_OPENMP)
 #  pragma omp critical (GM_IdentityImage)
 #endif
@@ -123,6 +131,9 @@
       if (q == (PixelPacket *) NULL)
         thread_status=MagickFail;
 
+      if (image->storage_class == PseudoClass)
+        indexes=AccessMutableIndexes(image);
+
       if (q != (PixelPacket *) NULL)
         {
           double
@@ -134,9 +145,9 @@
             blue;
 
           blue=y/order;
-          for(green = 0; green < cube_size; green++)
+          for (green = 0; green < cube_size; green++)
             {
-              for(red = 0; red < cube_size; red++)
+              for (red = 0; red < cube_size; red++)
                 {
                   value=MaxRGBDouble * (double)red / (double)(cube_size - 1);
                   q->red   = RoundDoubleToQuantum(value);
@@ -145,6 +156,11 @@
                   value    = MaxRGBDouble * (double)blue / (double)(cube_size - 1);
                   q->blue  = RoundDoubleToQuantum(value);
                   q->opacity = OpaqueOpacity;
+                  if (indexes != (IndexPacket *) NULL)
+                    {
+                      image->colormap[index]=*q;
+                      *indexes++=index++;
+                    }
                   q++;
                 }
             }
diff -r 63c1903547d7 -r 11f622f51ff5 www/Changelog.html
--- a/www/Changelog.html	Sun Mar 26 16:24:04 2023 -0500
+++ b/www/Changelog.html	Sun Mar 26 18:02:08 2023 -0500
@@ -40,6 +40,8 @@
 <p>2023-03-26  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
 <blockquote>
 <ul class="simple">
+<li><p>coders/identity.c (ReadIdentityImage): Return a PseudoClass
+image if possible.</p></li>
 <li><p>coders/miff.c (ReadMIFFImage): With depth == 32, the range of
 image-&gt;colors is 1 to 65536.</p></li>
 </ul>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.