#include #include #include unsigned char * simple_resize(unsigned char * orgin, int ox, int oy, int dx, int dy) { unsigned char *cr, *p, *l; int i, j, k, ip; assert(cr = (unsigned char*)malloc(dx*dy*3)); l = cr; for(j=0; j=ox) xb=ox-1; yb=(j+1)*oy/dy; if(yb>=oy) yb=oy-1; for(l=ya,r=0,g=0,b=0,sq=0;l<=yb;l++) { q=orgin+((l*ox+xa)*3); for(k=xa;k<=xb;k++,q+=3,sq++) { r+=q[0]; g+=q[1]; b+=q[2]; } } p[0]=r/sq; p[1]=g/sq; p[2]=b/sq; } } return cr; } unsigned char * rotate(unsigned char *i, int ox, int oy, int rot) { unsigned char * n, * p; int x, y; assert(n = (unsigned char*) malloc(ox * oy * 3)); switch(rot) { case 1: /* 90 deg right */ p = n + (oy - 1) * 3; for(y = 0; y 0; y--) { i -= 3; p[0] = i[0]; p[1] = i[1]; p[2] = i[2]; p += 3; } break; case 3: /* 90 deg left */ p = n; for(y = 0; y 0; y--) *(p++) = *(i--); break; case 3: /* 90 deg left */ p = n; for(y = 0; y