- for(y=0;y<im->ysize;y++) for(x=0;x<im->xsize;x++) {
- ld=196608;
- i_gpix(im,x,y,&val);
- currhb=pixbox(&val);
- /* printf("box = %d \n",currhb); */
- for(i=0;i<hb[currhb].cnt;i++) {
- /* printf("comparing: pix (%d,%d,%d) vec (%d,%d,%d)\n",val.channel[0],val.channel[1],val.channel[2],clr[hb[currhb].vec[i]].r,clr[hb[currhb].vec[i]].g,clr[hb[currhb].vec[i]].b); */
-
- cd=eucl_d(&clr[hb[currhb].vec[i]],&val);
- if (cd<ld) {
- ld=cd; /* shortest distance yet */
- bst_idx=hb[currhb].vec[i]; /* index of closest vector yet */
- }
- }
-
- clr[bst_idx].mcount++;
- accerr+=(ld);
- clr[bst_idx].dr+=val.channel[0];
- clr[bst_idx].dg+=val.channel[1];
- clr[bst_idx].db+=val.channel[2];
+ sample_indices = im->channels >= 3 ? NULL : gray_samples;
+ for(y=0;y<im->ysize;y++) {
+ i_gsamp(im, 0, im->xsize, y, line, sample_indices, 3);
+ val = line;
+ for(x=0;x<im->xsize;x++) {
+ ld=196608;
+ /*i_gpix(im,x,y,&val);*/
+ currhb=pixbox_ch(val);
+ /* printf("box = %d \n",currhb); */
+ for(i=0;i<hb[currhb].cnt;i++) {
+ /* printf("comparing: pix (%d,%d,%d) vec (%d,%d,%d)\n",val.channel[0],val.channel[1],val.channel[2],clr[hb[currhb].vec[i]].r,clr[hb[currhb].vec[i]].g,clr[hb[currhb].vec[i]].b); */
+
+ cd=eucl_d_ch(&clr[hb[currhb].vec[i]],val);
+ if (cd<ld) {
+ ld=cd; /* shortest distance yet */
+ bst_idx=hb[currhb].vec[i]; /* index of closest vector yet */
+ }
+ }
+
+ clr[bst_idx].mcount++;
+ accerr+=(ld);
+ clr[bst_idx].dr+=val[0];
+ clr[bst_idx].dg+=val[1];
+ clr[bst_idx].db+=val[2];
+
+ val += 3; /* next 3 samples (next pixel) */
+ }