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