From 3b6a15452be7b300bc7be5a7927b4b210e7cc732 Mon Sep 17 00:00:00 2001 From: kramm <kramm> Date: Sun, 19 May 2002 13:34:12 +0000 Subject: [PATCH] * routine swfoutput_drawimagejpeg now takes a bitmap as parameter. * routine swfoutput_drawimagelossless now fixes the line sizes. --- pdf2swf/swfoutput.cc | 45 ++++++++++++++++++++++++++++++++++++++++++++- pdf2swf/swfoutput.h | 4 ++-- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index d6974b2..52f64ff 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -1405,7 +1405,7 @@ static void drawimage(struct swfoutput*obj, int bitid, int sizex,int sizey, 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, @@ -1431,6 +1431,29 @@ int swfoutput_drawimagejpeg(struct swfoutput*obj, char*filename, int sizex,int s 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, @@ -1464,11 +1487,29 @@ int swfoutput_drawimagelossless256(struct swfoutput*obj, U8*mem, RGBA*pal, int s 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); @@ -1478,6 +1519,8 @@ int swfoutput_drawimagelossless256(struct swfoutput*obj, U8*mem, RGBA*pal, int s tag = oldtag; return -1; } + if(mem2) + free(mem2); drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4); return bitid; diff --git a/pdf2swf/swfoutput.h b/pdf2swf/swfoutput.h index 2aabb5b..55b13b1 100644 --- a/pdf2swf/swfoutput.h +++ b/pdf2swf/swfoutput.h @@ -99,7 +99,7 @@ void swfoutput_drawchar(struct swfoutput*,double x,double y,char*a, int charnr); void swfoutput_drawpath(struct swfoutput*, T1_OUTLINE*outline, struct swfmatrix*m); void swfoutput_startclip(struct swfoutput*, T1_OUTLINE*outline, struct swfmatrix*m); void swfoutput_endclip(struct swfoutput*); -int swfoutput_drawimagejpeg(struct swfoutput*, char*filename, int sizex,int sizey, +int swfoutput_drawimagejpeg(struct swfoutput*, RGBA*pic, int sizex,int sizey, double x1,double y1, double x2,double y2, double x3,double y3, @@ -109,7 +109,7 @@ int swfoutput_drawimagelossless(struct swfoutput*, RGBA*pic, int sizex, int size double x2,double y2, double x3,double y3, double x4,double y4); -int swfoutput_drawimagelossless256(struct swfoutput*, U8*pic,RGBA*pal, int sizex, int sizey, +int swfoutput_drawimagelossless256(struct swfoutput*, U8*pic, RGBA*pal, int sizex, int sizey, double x1,double y1, double x2,double y2, double x3,double y3, -- 1.7.10.4