ref: 0ab7b7204c67da088e58dbc00a49813c432ce353
parent: 65702299b3f1d4fa27bf14c471cda66078b0110e
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Mon Aug 12 15:28:10 EDT 2013
resample: fix XRGB32 color channel handling
--- a/sys/src/cmd/resample.c
+++ b/sys/src/cmd/resample.c
@@ -133,7 +133,7 @@
Memimage*
resample(int xsize, int ysize, Memimage *m)
{- int i, j, bpl, nchan;
+ int i, j, d, bpl, nchan;
Memimage *new;
uchar **oscan, **nscan;
@@ -166,13 +166,12 @@
}
/* resample in X */
- nchan = m->depth/8;
+ nchan = d = m->depth/8;
+ if(m->chan == XRGB32)
+ nchan--;
for(i=0; i<Dy(m->r); i++){- for(j=0; j<nchan; j++){- if(j==0 && m->chan==XRGB32)
- continue;
- resamplex(oscan[i], j, nchan, Dx(m->r), nscan[i], xsize);
- }
+ for(j=0; j<nchan; j++)
+ resamplex(oscan[i], j, d, Dx(m->r), nscan[i], xsize);
free(oscan[i]);
oscan[i] = nscan[i];
nscan[i] = malloc(bpl);
@@ -183,7 +182,7 @@
/* resample in Y */
for(i=0; i<xsize; i++)
for(j=0; j<nchan; j++)
- resampley(oscan, nchan*i+j, Dy(m->r), nscan, ysize);
+ resampley(oscan, d*i+j, Dy(m->r), nscan, ysize);
/* pack data into destination */
bpl = bytesperline(new->r, m->depth);
--
⑨