shithub: riscv

Download patch

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);
--