int drawonlyshapes=0;
int jpegquality=85;
int storeallcharacters=0;
+int enablezlib=0;
static int flag_protected = 0;
typedef unsigned char u8;
if(textid>=0)
endtext();
- /* XXX the following is needed due to a bug in the SWF player.
- Filled shapes consisting solely of curves don't get
- filled correctly if they are in the same shape */
- if(shapeid>=0 && fill) {
+ /* Multiple polygons in one shape don't overlap correctly,
+ so we better start a new shape here if the polygon is filled
+ */
+ if(shapeid>=0 && fill && !ignoredraworder) {
endshape();
}
tag = swf_InsertTag(tag,ST_END);
- if FAILED(swf_WriteSWF(fi,&swf))
- logf("<error> WriteSWF() failed.\n");
+ if(enablezlib) {
+ if FAILED(swf_WriteSWC(fi,&swf))
+ logf("<error> WriteSWC() failed.\n");
+ } else {
+ if FAILED(swf_WriteSWF(fi,&swf))
+ logf("<error> WriteSWF() failed.\n");
+ }
+
if(filename)
close(fi);
logf("<notice> SWF written\n");
swf_ObjectPlace(tag,myshapeid,/*depth*/depth++,NULL,NULL,NULL);
}
-int swfoutput_drawimagejpeg(struct swfoutput*obj, char*filename, int sizex,int sizey,
+int swfoutput_drawimagejpeg_old(struct swfoutput*obj, char*filename, int sizex,int sizey,
double x1,double y1,
double x2,double y2,
double x3,double y3,
return bitid;
}
+int swfoutput_drawimagejpeg(struct swfoutput*obj, RGBA*mem, int sizex,int sizey,
+ double x1,double y1,
+ double x2,double y2,
+ double x3,double y3,
+ double x4,double y4)
+{
+ TAG*oldtag;
+ JPEGBITS*jpeg;
+
+ if(shapeid>=0)
+ endshape();
+ if(textid>=0)
+ endtext();
+
+ int bitid = ++currentswfid;
+ oldtag = tag;
+ tag = swf_InsertTag(tag,ST_DEFINEBITSJPEG2);
+ swf_SetU16(tag, bitid);
+ swf_SetJPEGBits2(tag,sizex,sizey,mem,jpegquality);
+ drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4);
+ return bitid;
+}
+
int swfoutput_drawimagelossless(struct swfoutput*obj, RGBA*mem, int sizex,int sizey,
double x1,double y1,
double x2,double y2,
double x4,double y4)
{
TAG*oldtag;
+ U8*mem2 = 0;
if(shapeid>=0)
endshape();
if(textid>=0)
endtext();
+ if(sizex&3)
+ {
+ /* SWF expects scanlines to be 4 byte aligned */
+ printf("%d -> %d\n", sizex, BYTES_PER_SCANLINE(sizex));
+ int x,y;
+ U8*ptr;
+ mem2 = (U8*)malloc(BYTES_PER_SCANLINE(sizex)*sizey);
+ ptr = mem2;
+ for(y=0;y<sizey;y++)
+ {
+ for(x=0;x<sizex;x++)
+ *ptr++ = mem[y*sizex+x];
+ ptr+= BYTES_PER_SCANLINE(sizex)-sizex;
+ }
+ mem = mem2;
+ }
+
int bitid = ++currentswfid;
oldtag = tag;
tag = swf_InsertTag(tag,ST_DEFINEBITSLOSSLESS2);
tag = oldtag;
return -1;
}
+ if(mem2)
+ free(mem2);
drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4);
return bitid;