- RGBA*line2=0;
-
- for(y=0;y<i->height2;y++) {
- int n;
- RGBA*line = &i->img[y*i->width2];
-
- if(!i->antialize) {
- memcpy(&img[y*dest->width], line, sizeof(RGBA)*dest->width);
- } else {
- if(y&1) {
- int x;
- RGBA*line1=line;
- RGBA* p;
- if(!line2)
- line2=line1;
- p = &img[(y/2)*dest->width];
- for(x=0;x<dest->width;x++) {
- RGBA*p1 = &line1[x*2];
- RGBA*p2 = &line1[x*2+1];
- RGBA*p3 = &line2[x*2];
- RGBA*p4 = &line2[x*2+1];
- p[x].r = (p1->r + p2->r + p3->r + p4->r)/4;
- p[x].g = (p1->g + p2->g + p3->g + p4->g)/4;
- p[x].b = (p1->b + p2->b + p3->b + p4->b)/4;
- p[x].a = (p1->a + p2->a + p3->a + p4->a)/4;
- }
- }
- }
- line2=line;
+ int antialize = i->antialize;
+
+ if(antialize <= 1) /* no antializing */ {
+ for(y=0;y<i->height2;y++) {
+ RGBA*line = &i->img[y*i->width2];
+ memcpy(&img[y*dest->width], line, sizeof(RGBA)*dest->width);
+ }
+ } else {
+ RGBA**lines = (RGBA**)rfx_calloc(sizeof(RGBA*)*antialize);
+ int q = antialize*antialize;
+ int ypos = 0;
+ for(y=0;y<i->height2;y++) {
+ int n;
+ ypos = y % antialize;
+ lines[ypos] = &i->img[y*i->width2];
+ if(ypos == antialize-1) {
+ RGBA*out = &img[(y / antialize)*dest->width];
+ int x;
+ int r,g,b,a;
+ for(x=0;x<dest->width;x++) {
+ int xpos = x*antialize;
+ int yp;
+ U32 r=0,g=0,b=0,a=0;
+ for(yp=0;yp<antialize;yp++) {
+ RGBA*lp = &lines[yp][xpos];
+ int xp;
+ for(xp=0;xp<antialize;xp++) {
+ RGBA*p = &lp[xp];
+ r += p->r;
+ g += p->g;
+ b += p->b;
+ a += p->a;
+ }
+ }
+ out[x].r = r / q;
+ out[x].g = g / q;
+ out[x].b = b / q;
+ out[x].a = a / q;
+ }
+ }
+ }
+ rfx_free(lines);