+ //swfoutput_setfont(&output, fontid, fileName);
+
+ if(!setGfxFont(fontid, 0, 0)) {
+ setGfxFont(fontid, fileName, maxSize);
+ }
+
+ if(fileName && del)
+ unlinkfont(fileName);
+ if(fileName)
+ free(fileName);
+ free(fontid);
+}
+
+#define SQR(x) ((x)*(x))
+
+unsigned char* antialize(unsigned char*data, int width, int height, int newwidth, int newheight, int palettesize)
+{
+ if((newwidth<2 || newheight<2) ||
+ (width<=newwidth || height<=newheight))
+ return 0;
+ unsigned char*newdata;
+ int x,y;
+ newdata= (unsigned char*)malloc(newwidth*newheight);
+ int t;
+ double fx = (double)(width)/newwidth;
+ double fy = (double)(height)/newheight;
+ double px = 0;
+ int blocksize = (int)(8192/(fx*fy));
+ int r = 8192*256/palettesize;
+ for(x=0;x<newwidth;x++) {
+ double ex = px + fx;
+ int fromx = (int)px;
+ int tox = (int)ex;
+ int xweight1 = (int)(((fromx+1)-px)*256);
+ int xweight2 = (int)((ex-tox)*256);
+ double py =0;
+ for(y=0;y<newheight;y++) {
+ double ey = py + fy;
+ int fromy = (int)py;
+ int toy = (int)ey;
+ int yweight1 = (int)(((fromy+1)-py)*256);
+ int yweight2 = (int)((ey-toy)*256);
+ int a = 0;
+ int xx,yy;
+ for(xx=fromx;xx<=tox;xx++)
+ for(yy=fromy;yy<=toy;yy++) {
+ int b = 1-data[width*yy+xx];
+ int weight=256;
+ if(xx==fromx) weight = (weight*xweight1)/256;
+ if(xx==tox) weight = (weight*xweight2)/256;
+ if(yy==fromy) weight = (weight*yweight1)/256;
+ if(yy==toy) weight = (weight*yweight2)/256;
+ a+=b*weight;
+ }
+ //if(a) a=(palettesize-1)*r/blocksize;
+ newdata[y*newwidth+x] = (a*blocksize)/r;
+ py = ey;
+ }
+ px = ex;
+ }
+ return newdata;
+}
+
+#define IMAGE_TYPE_JPEG 0
+#define IMAGE_TYPE_LOSSLESS 1
+
+static void drawimage(gfxdevice_t*dev, RGBA* data, int sizex,int sizey,
+ double x1,double y1,
+ double x2,double y2,
+ double x3,double y3,
+ double x4,double y4, int type)
+{
+ RGBA*newpic=0;
+
+ double l1 = sqrt((x4-x1)*(x4-x1) + (y4-y1)*(y4-y1));
+ double l2 = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
+
+ gfxline_t p1,p2,p3,p4,p5;
+ p1.type=gfx_moveTo;p1.x=x1; p1.y=y1;p1.next=&p2;
+ p2.type=gfx_lineTo;p2.x=x2; p2.y=y2;p2.next=&p3;
+ p3.type=gfx_lineTo;p3.x=x3; p3.y=y3;p3.next=&p4;
+ p4.type=gfx_lineTo;p4.x=x4; p4.y=y4;p4.next=&p5;
+ p5.type=gfx_lineTo;p5.x=x1; p5.y=y1;p5.next=0;
+
+ {p1.x = (int)(p1.x*20)/20.0;
+ p1.y = (int)(p1.y*20)/20.0;
+ p2.x = (int)(p2.x*20)/20.0;
+ p2.y = (int)(p2.y*20)/20.0;
+ p3.x = (int)(p3.x*20)/20.0;
+ p3.y = (int)(p3.y*20)/20.0;
+ p4.x = (int)(p4.x*20)/20.0;
+ p4.y = (int)(p4.y*20)/20.0;
+ p5.x = (int)(p5.x*20)/20.0;
+ p5.y = (int)(p5.y*20)/20.0;
+ }
+
+ float m00,m10,tx;
+ float m01,m11,ty;
+
+ gfxmatrix_t m;
+ m.m00 = (p4.x-p1.x)/sizex; m.m10 = (p2.x-p1.x)/sizey;
+ m.m01 = (p4.y-p1.y)/sizex; m.m11 = (p2.y-p1.y)/sizey;
+ m.tx = p1.x - 0.5;
+ m.ty = p1.y - 0.5;
+
+ gfximage_t img;
+ img.data = (gfxcolor_t*)data;
+ img.width = sizex;
+ img.height = sizey;
+
+ if(type == IMAGE_TYPE_JPEG)
+ /* TODO: pass image_dpi to device instead */
+ dev->setparameter(dev, "next_bitmap_is_jpeg", "1");
+
+ dev->fillbitmap(dev, &p1, &img, &m, 0);
+}
+
+void drawimagejpeg(gfxdevice_t*dev, RGBA*mem, int sizex,int sizey,
+ double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4)
+{
+ drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_JPEG);
+}
+
+void drawimagelossless(gfxdevice_t*dev, RGBA*mem, int sizex,int sizey,
+ double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4)
+{
+ drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_LOSSLESS);