ref: 443555e5d740523436a4aa6b3317d9c92bb3c8ef
parent: 0c863b1ce85c144b8359b75a631876bed095907c
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Jul 21 22:01:30 EDT 2024
don't store pixels in FP format, convert as we go
--- a/rast.c
+++ b/rast.c
@@ -335,7 +335,7 @@
}
static int
-qbzr(SegQ *seg, int ns, int dw, int dh, Sval *p)
+qbzr(SegQ *seg, int ns, int dw, int dh, u8int *p)
{
int ju², j², w, h, i, j, ju, px, py;
Sval rju², s₀, s, *c, *c₀x, *c₀y, *cs, zx, zy;
@@ -453,7 +453,8 @@
}
c = c₀x + 3*j²*j²;
}
- *p++ = s;
+ *p++ = 255 -
+ (s < QBZR_PIX_SCALE/255 ? 0 : (s >= QBZR_PIX_SCALE ? 255 : s/QBZR_PIX_SCALE*255));
}
}
free(ma);
@@ -557,13 +558,11 @@
Sval scale, offY;
SegQ *s₀, *s, *p;
Spt *pts;
- Sval *fp;
u8int *b;
r = -1;
ngs = 0;
pts = nil;
- fp = nil;
if(g->simple != nil){
gs[ngs++] = g;
@@ -664,21 +663,16 @@
}
npx = w*h;
- fp = malloc(npx*sizeof(*fp));
- fp[0] = 0;
- if(qbzr(s₀, s-s₀, w, h, fp) == 0){
- b = (u8int*)fp;
- for(i = 0; i < npx; i++)
- b[i] = 255 - (fp[i] < QBZR_PIX_SCALE/255 ? 0 : (fp[i] >= QBZR_PIX_SCALE ? 255 : fp[i]/QBZR_PIX_SCALE*255));
- if((b = realloc(fp, npx)) != nil){
- im->b = b;
- im->w = w;
- im->h = h;
- im->baseline = baseline;
- fp = nil;
- r = 0;
- }
- }
+ b = malloc(npx);
+ b[0] = 0;
+ if(qbzr(s₀, s-s₀, w, h, b) == 0){
+ im->b = b;
+ im->w = w;
+ im->h = h;
+ im->baseline = baseline;
+ r = 0;
+ }else
+ free(b);
done:
for(i = 0; i < ngs; i++){
@@ -686,6 +680,5 @@
free(gs[i]);
}
free(pts);
- free(fp);
return r;
}