home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume34 / imagemagick / patch02 / fix-02
Encoding:
Text File  |  1992-12-27  |  11.2 KB  |  435 lines

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