01 #ifndef UTILS_HH 02 #define UTILS_HH "Fae" 03 CDC *ScaleDCToSquare(CDC *inp,I64 new_width) { 04 F64 h_ratio=ToF64(new_width)/inp->height; 05 F64 w_ratio=ToF64(new_width)/inp->width; 06 CDC *new=DCNew(new_width,new_width); 07 DCFill(new,TRANSPARENT); 08 I64 ox=0,oy=0,x,y,fw,fh,c; 09 if(inp->width>inp->height) { 10 h_ratio=inp->height/ToF64(inp->width)*w_ratio; 11 } else { 12 w_ratio=inp->width/ToF64(inp->height)*h_ratio; 13 } 14 //height is taller 15 ox=(new_width-inp->width*w_ratio)/2.; 16 oy=(new_width-inp->height*h_ratio)/2.; 17 fw=w_ratio*inp->width; 18 fh=h_ratio*inp->height; 19 for(x=0;x!=fw;++x) 20 for(y=0;y!=fh;++y) { 21 c=GrPeek(inp,(x+.5)/w_ratio,(y+.5)/h_ratio); 22 if(c>=0) { 23 new->color=c; 24 GrPlot0(new,ox+x,oy+y); 25 } 26 } 27 return new; 28 } 29 CDC *SpriteToSquareDC(U8 *inp,I64 new_width) { 30 I64 min_x,max_x,min_y,max_y; 31 SpriteExtents(inp,&min_x,&max_x,&min_y,&max_y); 32 CDC *res=DCNew(max_x-min_x+1,max_y-min_y+1),*ret; 33 DCFill(res,TRANSPARENT); 34 Sprite3(res,-min_x,-min_y,0,inp); 35 ret=ScaleDCToSquare(res,new_width); 36 DCDel(res); 37 return ret; 38 } 39 #endif