ref: df9597ecde1687ac037101314b477c0f01d3b6a6
parent: 1b58ec9279f0740d505ea15074b497295573d135
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);
--
⑨