X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=pctb%2Fstructure.h;h=f3fbb72ed2d157ea01a3b103e2d2854544bb2f85;hp=ec399a2aaa7cb974dfee2b636971ad2abb348415;hb=9334b48a221df6f96a88933be8fde35e2ef41b35;hpb=05700033bb05f67407798385699519a96da803c0 diff --git a/pctb/structure.h b/pctb/structure.h index ec399a2..f3fbb72 100644 --- a/pctb/structure.h +++ b/pctb/structure.h @@ -42,45 +42,47 @@ extern const CanonColourInfo canoncolourinfos[]; CanonImage *alloc_canon_image(int w, int h); -#define CANONICALISE_IMAGE(im,w,h, COMPUTE_RGB) do{ \ - /* compute_rgb should be a number of statements, or \ - * a block, which assigns to \ - * unsigned long rgb; \ - * given the values of \ - * int x,y; \ - * all of which are anamorphic. Result is stored in im. \ - * The COMPUTE_RGB is executed exactly once for \ - * each pixel in reading order. \ - */ \ - (im)= alloc_canon_image((w), (h)); \ - \ - int x,y; \ - unsigned long last_rgb= ~0UL; \ - int last_c= -1; \ - for (y=0; y<(h); y++) { \ - for (x=0; x<(w); x++) { \ - const CanonColourInfo *cci; \ - unsigned long rgb; \ - COMPUTE_RGB; \ - if (rgb == last_rgb) { \ - (im)->d[y*(w) + x]= last_c; \ - } else { \ - for (cci=canoncolourinfos; cci->c; cci++) { \ - if (cci->rgb == rgb) { \ - last_rgb= rgb; \ - (im)->d[y*(w) + x]= last_c= cci->c; \ - break; \ - } \ - } \ - } \ - } \ - if (DEBUGP(rect)) { \ - fprintf(debug, "%4d ",y); \ - fwrite(im->d + y*w, 1,w, debug); \ - fputc('\n',debug); \ - } \ - } \ - debug_flush(); \ +#define CANONICALISE_IMAGE(im,w,h, COMPUTE_RGB) do{ \ + /* compute_rgb should be a number of statements, or \ + * a block, which assigns to \ + * unsigned long rgb; \ + * given the values of \ + * int x,y; \ + * all of which are anamorphic. Result is stored in im. \ + * The COMPUTE_RGB is executed exactly once for \ + * each pixel in reading order. \ + */ \ + (im)= alloc_canon_image((w), (h)); \ + (im)->rgb= alloc_rgb_image((w), (h)); \ + \ + int x,y; \ + unsigned long last_rgb= ~0UL; \ + int last_c= -1; \ + for (y=0; y<(h); y++) { \ + for (x=0; x<(w); x++) { \ + const CanonColourInfo *cci; \ + unsigned long rgb; \ + COMPUTE_RGB; \ + CANONIMG_ALSO_STORERGB((im)->rgb); \ + if (rgb == last_rgb) { \ + (im)->d[y*(w) + x]= last_c; \ + } else { \ + for (cci=canoncolourinfos; cci->c; cci++) { \ + if (cci->rgb == rgb) { \ + last_rgb= rgb; \ + (im)->d[y*(w) + x]= last_c= cci->c; \ + break; \ + } \ + } \ + } \ + } \ + if (DEBUGP(rect)) { \ + fprintf(debug, "%4d ",y); \ + fwrite(im->d + y*(w), 1,(w), debug); \ + fputc('\n',debug); \ + } \ + } \ + debug_flush(); \ }while(0)