home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #31 / NN_1992_31.iso / spool / comp / sources / bugs / 316 < prev    next >
Encoding:
Text File  |  1992-12-22  |  12.1 KB  |  463 lines

  1. Newsgroups: comp.sources.bugs
  2. Path: sparky!uunet!paladin.american.edu!darwin.sura.net!udel!louie!eplrx7!eplrx7.es.dupont.com!cristy
  3. From: cristy@eplrx7.es.duPont.com (Cristy Dude)
  4. Subject: ImageMagick 2.2 - patch #2
  5. Message-ID: <cristy.725059729@eplrx7.es.dupont.com>
  6. Summary: X11 image processing and display utilities
  7. Keywords: UNIX VMS X11 SGI DEC Cray Sun Vax
  8. Organization: DuPont Engineering Physics Laboratory
  9. Date: Tue, 22 Dec 1992 21:28:49 GMT
  10. Lines: 451
  11.  
  12.  
  13.                     ImageMagick 2.2 Patch #2
  14.  
  15. To apply this patch:
  16.  
  17. cd to the top of the source tree (to the directory containing the
  18. "ImageMagick" subdirectories) and do:
  19.  
  20.   patch -p < ThisFile
  21.  
  22. Prereq: ImageMagick 2.2.1 (posted from comp.sources.misc, Volume 34,
  23. Issue 28 + Patch 1).
  24.  
  25. Alternatively get the entire distribution as contrib/ImageMagick.tar.Z
  26. on export.lcs.mit.edu.  I will post this patch to comp.sources.misc in
  27. a few days.
  28.  
  29.  
  30. diff -r -c ImageMagick/ChangeLog ImageMagick2.2.2/ChangeLog
  31. *** ImageMagick/ChangeLog    Mon Dec 21 14:12:35 1992
  32. --- ImageMagick2.2.2/ChangeLog    Tue Dec 22 16:07:20 1992
  33. ***************
  34. *** 1,3 ****
  35. --- 1,14 ----
  36. + ImageMagick 2.2.2
  37. +   o Dithering did not work properly on the Cray (due to right shift problem).
  38. +   o In most cases dithering requires 1/2 as much memory as previously.
  39. +   o Dithering was sped up by ~15%.
  40. +   o Occasionally the quantization error was reported incorrectly.
  41.   ImageMagick 2.2.1
  42.   
  43.     o The number of colors reported with the -verbose option was on
  44. diff -r -c ImageMagick/X.c ImageMagick2.2.2/X.c
  45. *** ImageMagick/X.c    Mon Dec 21 14:12:34 1992
  46. --- ImageMagick2.2.2/X.c    Tue Dec 22 16:06:18 1992
  47. ***************
  48. *** 1283,1291 ****
  49.     /*
  50.       Initialize annotated image.
  51.     */
  52. !   if (image->packets != (image->columns*image->rows))
  53. !     if (!UncompressImage(image))
  54. !       return(False);
  55.     /*
  56.       Initialize annotated pixmap.
  57.     */
  58. --- 1283,1290 ----
  59.     /*
  60.       Initialize annotated image.
  61.     */
  62. !   if (!UncompressImage(image))
  63. !     return(False);
  64.     /*
  65.       Initialize annotated pixmap.
  66.     */
  67. diff -r -c ImageMagick/display.h ImageMagick2.2.2/display.h
  68. *** ImageMagick/display.h    Tue Dec 22 16:23:13 1992
  69. --- ImageMagick2.2.2/display.h    Tue Dec 22 16:23:32 1992
  70. ***************
  71. *** 51,55 ****
  72.   */
  73.   #ifndef lint
  74.   static char 
  75. !   Version[]="@(#)ImageMagick 2.2.1 92/12/10 cristy@dupont.com";
  76.   #endif
  77. --- 51,55 ----
  78.   */
  79.   #ifndef lint
  80.   static char 
  81. !   Version[]="@(#)ImageMagick 2.2.2 92/12/22 cristy@dupont.com";
  82.   #endif
  83. diff -r -c ImageMagick/image.c ImageMagick2.2.2/image.c
  84. *** ImageMagick/image.c    Fri Dec 18 17:07:28 1992
  85. --- ImageMagick2.2.2/image.c    Tue Dec 22 16:06:19 1992
  86. ***************
  87. *** 731,739 ****
  88.     /*
  89.       Image must be uncompressed.
  90.     */
  91. !   if (image->packets != (image->columns*image->rows))
  92. !     if (!UncompressImage(image))
  93. !       return;
  94.     if (!image->alpha)
  95.       {
  96.         /*
  97. --- 731,738 ----
  98.     /*
  99.       Image must be uncompressed.
  100.     */
  101. !   if (!UncompressImage(image))
  102. !     return;
  103.     if (!image->alpha)
  104.       {
  105.         /*
  106. ***************
  107. *** 5190,5195 ****
  108. --- 5189,5196 ----
  109.     RunlengthPacket
  110.       *uncompressed_pixels;
  111.   
  112. +   if (image->packets == (image->columns*image->rows))
  113. +     return(True);
  114.     /*
  115.       Uncompress runlength-encoded packets.
  116.     */
  117. Common subdirectories: ImageMagick/images and ImageMagick2.2.2/images
  118. diff -r -c ImageMagick/quantize.c ImageMagick2.2.2/quantize.c
  119. *** ImageMagick/quantize.c    Mon Dec 21 11:12:00 1992
  120. --- ImageMagick2.2.2/quantize.c    Tue Dec 22 16:06:18 1992
  121. ***************
  122. *** 745,753 ****
  123.         blue;
  124.     } ScaledColorPacket;
  125.   
  126. -   Image
  127. -     *dithered_image;
  128.     int
  129.       *cache,
  130.       odd_scanline;
  131. --- 745,750 ----
  132. ***************
  133. *** 769,786 ****
  134.       *cs,
  135.       *ns;
  136.   
  137.     register unsigned int
  138.       id;
  139.   
  140. -   register unsigned short
  141. -     index;
  142.     ScaledColorPacket
  143.       *scanline;
  144.   
  145.     unsigned char
  146. !     *range_limit,
  147. !     *range_table;
  148.   
  149.     unsigned int
  150.       i,
  151. --- 766,785 ----
  152.       *cs,
  153.       *ns;
  154.   
  155. +   register unsigned char
  156. +     *range_limit;
  157.     register unsigned int
  158.       id;
  159.   
  160.     ScaledColorPacket
  161.       *scanline;
  162.   
  163.     unsigned char
  164. !     blue,
  165. !     green,
  166. !     *range_table,
  167. !     red;
  168.   
  169.     unsigned int
  170.       i,
  171. ***************
  172. *** 787,803 ****
  173.       x,
  174.       y;
  175.   
  176.     /*
  177. !     Initialize dithered image attributes.
  178.     */
  179. !   image->orphan=True;
  180. !   dithered_image=CopyImage(image,image->columns,image->rows,False);
  181. !   image->orphan=False;
  182. !   if (dithered_image == (Image *) NULL)
  183. !     {
  184. !       Warning("unable to dither image","memory allocation failed");
  185. !       return(True);
  186. !     }
  187.     /*
  188.       Allocate the cache & scanline buffers to keep track of quantization error.
  189.     */
  190. --- 786,800 ----
  191.       x,
  192.       y;
  193.   
  194. +   unsigned short
  195. +     index;
  196.     /*
  197. !     Image must be uncompressed.
  198.     */
  199. !   if (!UncompressImage(image))
  200. !     return(True);
  201. !   image->compression=NoCompression;
  202.     /*
  203.       Allocate the cache & scanline buffers to keep track of quantization error.
  204.     */
  205. ***************
  206. *** 827,846 ****
  207.       Preload first scanline.
  208.     */
  209.     p=image->pixels;
  210. -   image->runlength=p->length+1;
  211.     cs=scanline+1;
  212.     for (i=0; i < image->columns; i++)
  213.     {
  214. -     if (image->runlength > 0)
  215. -       image->runlength--;
  216. -     else
  217. -       {
  218. -         p++;
  219. -         image->runlength=p->length;
  220. -       }
  221.       cs->red=p->red;
  222.       cs->green=p->green;
  223.       cs->blue=p->blue;
  224.       cs++;
  225.     }
  226.     odd_scanline=False;
  227. --- 824,836 ----
  228.       Preload first scanline.
  229.     */
  230.     p=image->pixels;
  231.     cs=scanline+1;
  232.     for (i=0; i < image->columns; i++)
  233.     {
  234.       cs->red=p->red;
  235.       cs->green=p->green;
  236.       cs->blue=p->blue;
  237. +     p++;
  238.       cs++;
  239.     }
  240.     odd_scanline=False;
  241. ***************
  242. *** 856,871 ****
  243.             ns+=(image->columns+2);
  244.           for (i=0; i < image->columns; i++)
  245.           {
  246. -           if (image->runlength > 0)
  247. -             image->runlength--;
  248. -           else
  249. -             {
  250. -               p++;
  251. -               image->runlength=p->length;
  252. -             }
  253.             ns->red=p->red;
  254.             ns->green=p->green;
  255.             ns->blue=p->blue;
  256.             ns++;
  257.           }
  258.         }
  259. --- 846,855 ----
  260.             ns+=(image->columns+2);
  261.           for (i=0; i < image->columns; i++)
  262.           {
  263.             ns->red=p->red;
  264.             ns->green=p->green;
  265.             ns->blue=p->blue;
  266. +           p++;
  267.             ns++;
  268.           }
  269.         }
  270. ***************
  271. *** 874,880 ****
  272.           /*
  273.             Distribute error left-to-right for even scanlines.
  274.           */
  275. !         q=dithered_image->pixels+image->columns*y;
  276.           cs=scanline+1;
  277.           ns=scanline+(image->columns+2)+1;
  278.           step=1;
  279. --- 858,864 ----
  280.           /*
  281.             Distribute error left-to-right for even scanlines.
  282.           */
  283. !         q=image->pixels+image->columns*y;
  284.           cs=scanline+1;
  285.           ns=scanline+(image->columns+2)+1;
  286.           step=1;
  287. ***************
  288. *** 884,890 ****
  289.           /*
  290.             Distribute error right-to-left for odd scanlines.
  291.           */
  292. !         q=dithered_image->pixels+image->columns*y+(image->columns-1);
  293.           cs=scanline+(image->columns+2)+(image->columns-1)+1;
  294.           ns=scanline+(image->columns-1)+1;
  295.           step=(-1);
  296. --- 868,874 ----
  297.           /*
  298.             Distribute error right-to-left for odd scanlines.
  299.           */
  300. !         q=image->pixels+image->columns*y+(image->columns-1);
  301.           cs=scanline+(image->columns+2)+(image->columns-1)+1;
  302.           ns=scanline+(image->columns-1)+1;
  303.           step=(-1);
  304. ***************
  305. *** 891,900 ****
  306.         }
  307.       for (x=0; x < image->columns; x++)
  308.       {
  309. !       q->red=range_limit[cs->red];
  310. !       q->green=range_limit[cs->green];
  311. !       q->blue=range_limit[cs->blue];
  312. !       i=(q->red >> 2) << 12 | (q->green >> 2) << 6 | q->blue >> 2;
  313.         if (cache[i] < 0)
  314.           {
  315.             /*
  316. --- 875,884 ----
  317.         }
  318.       for (x=0; x < image->columns; x++)
  319.       {
  320. !       red=range_limit[cs->red];
  321. !       green=range_limit[cs->green];
  322. !       blue=range_limit[cs->blue];
  323. !       i=(red >> 2) << 12 | (green >> 2) << 6 | blue >> 2;
  324.         if (cache[i] < 0)
  325.           {
  326.             /*
  327. ***************
  328. *** 903,911 ****
  329.             node=cube.root;
  330.             for ( ; ; )
  331.             {
  332. !             id=(q->red > node->mid_red ? 1 : 0) |
  333. !               (q->green > node->mid_green ? 1 : 0) << 1 |
  334. !               (q->blue > node->mid_blue ? 1 : 0) << 2;
  335.               if ((node->children & (1 << id)) == 0)
  336.                 break;
  337.               node=node->child[id];
  338. --- 887,895 ----
  339.             node=cube.root;
  340.             for ( ; ; )
  341.             {
  342. !             id=(red > node->mid_red ? 1 : 0) |
  343. !               (green > node->mid_green ? 1 : 0) << 1 |
  344. !               (blue > node->mid_blue ? 1 : 0) << 2;
  345.               if ((node->children & (1 << id)) == 0)
  346.                 break;
  347.               node=node->child[id];
  348. ***************
  349. *** 913,931 ****
  350.             /*
  351.               Find closest color among siblings and their children.
  352.             */
  353. !           cube.color.red=q->red;
  354. !           cube.color.green=q->green;
  355. !           cube.color.blue=q->blue;
  356.             cube.distance=(~0);
  357.             ClosestColor(node->parent);
  358.             cache[i]=cube.color_number;
  359.           }
  360.         index=(unsigned short) cache[i];
  361. !       red_error=(int) q->red-(int) cube.colormap[index].red;
  362. !       green_error=(int) q->green-(int) cube.colormap[index].green;
  363. !       blue_error=(int) q->blue-(int) cube.colormap[index].blue;
  364.         q->index=index;
  365. -       q->length=0;
  366.         q+=step;
  367.         /*
  368.           Propagate the error in these proportions:
  369. --- 897,914 ----
  370.             /*
  371.               Find closest color among siblings and their children.
  372.             */
  373. !           cube.color.red=red;
  374. !           cube.color.green=green;
  375. !           cube.color.blue=blue;
  376.             cube.distance=(~0);
  377.             ClosestColor(node->parent);
  378.             cache[i]=cube.color_number;
  379.           }
  380.         index=(unsigned short) cache[i];
  381. !       red_error=(int) red-(int) cube.colormap[index].red;
  382. !       green_error=(int) green-(int) cube.colormap[index].green;
  383. !       blue_error=(int) blue-(int) cube.colormap[index].blue;
  384.         q->index=index;
  385.         q+=step;
  386.         /*
  387.           Propagate the error in these proportions:
  388. ***************
  389. *** 933,953 ****
  390.             3/16  5/16  1/16
  391.         */
  392.         cs+=step;
  393. !       cs->red+=red_error-((red_error*9+8) >> 4);
  394. !       cs->green+=green_error-((green_error*9+8) >> 4);
  395. !       cs->blue+=blue_error-((blue_error*9+8) >> 4);
  396.         ns-=step;
  397. !       ns->red+=(red_error*3+8) >> 4;
  398. !       ns->green+=(green_error*3+8) >> 4;
  399. !       ns->blue+=(blue_error*3+8) >> 4;
  400.         ns+=step;
  401. !       ns->red+=(red_error*5+8) >> 4;
  402. !       ns->green+=(green_error*5+8) >> 4;
  403. !       ns->blue+=(blue_error*5+8) >> 4;
  404.         ns+=step;
  405. !       ns->red+=(red_error+8) >> 4;
  406. !       ns->green+=(green_error+8) >> 4;
  407. !       ns->blue+=(blue_error+8) >> 4;
  408.       }
  409.       odd_scanline=!odd_scanline;
  410.     }
  411. --- 916,936 ----
  412.             3/16  5/16  1/16
  413.         */
  414.         cs+=step;
  415. !       cs->red+=(red_error-((red_error*9+8)/16));
  416. !       cs->green+=(green_error-((green_error*9+8)/16));
  417. !       cs->blue+=(blue_error-((blue_error*9+8)/16));
  418.         ns-=step;
  419. !       ns->red+=(red_error*3+8)/16;
  420. !       ns->green+=(green_error*3+8)/16;
  421. !       ns->blue+=(blue_error*3+8)/16;
  422.         ns+=step;
  423. !       ns->red+=(red_error*5+8)/16;
  424. !       ns->green+=(green_error*5+8)/16;
  425. !       ns->blue+=(blue_error*5+8)/16;
  426.         ns+=step;
  427. !       ns->red+=(red_error+8)/16;
  428. !       ns->green+=(green_error+8)/16;
  429. !       ns->blue+=(blue_error+8)/16;
  430.       }
  431.       odd_scanline=!odd_scanline;
  432.     }
  433. ***************
  434. *** 957,968 ****
  435.     (void) free((char *) scanline);
  436.     (void) free((char *) range_table);
  437.     (void) free((char *) cache);
  438. -   (void) free((char *) image->pixels);
  439. -   image->packets=dithered_image->packets;
  440. -   image->pixels=dithered_image->pixels;
  441. -   dithered_image->file=(FILE *) NULL;
  442. -   dithered_image->pixels=(RunlengthPacket *) NULL;
  443. -   DestroyImage(dithered_image);
  444.     return(False);
  445.   }
  446.   
  447. --- 940,945 ----
  448. Common subdirectories: ImageMagick/scenes and ImageMagick2.2.2/scenes
  449. Common subdirectories: ImageMagick/utilities and ImageMagick2.2.2/utilities
  450. Common subdirectories: ImageMagick/xtp and ImageMagick2.2.2/xtp
  451. -- 
  452. cristy@dupont.com
  453.