1 #   include	"bitmapConfig.h"
2 
3 #   include	"bmintern.h"
4 #   include	"bmio.h"
5 #   include	<appDebugon.h>
6 #   include	<sioFileio.h>
7 #   include	<sioHex.h>
8 #   include	<geoUnits.h>
9 
10 /************************************************************************/
11 /*									*/
12 /*  Write a bitmap to an rtf stream.					*/
13 /*									*/
14 /************************************************************************/
15 
bmRtfStartRtf(const BitmapDescription * bd,const char * type,SimpleOutputStream * sos)16 static int bmRtfStartRtf(	const BitmapDescription *	bd,
17 				const char *			type,
18 				SimpleOutputStream *		sos )
19     {
20     sioOutPrintf( sos, "{\\rtf1\\ansi\r\n" );
21     sioOutPrintf( sos, "\\deff1\r\n" );
22     sioOutPrintf( sos, "{\\fonttbl{\\f1\\fswiss Helvetica;}}\r\n" );
23     sioOutPrintf( sos, "\\sectd\\f1\\fs20\r\n" );
24 
25     sioOutPrintf( sos, "{\\pict%s", type );
26 
27     return 0;
28     }
29 
bmRtfImageSize(const BitmapDescription * bd,SimpleOutputStream * sos)30 static int bmRtfImageSize(	const BitmapDescription *	bd,
31 				SimpleOutputStream *		sos )
32     {
33     int			picwgoal;
34     int			pichgoal;
35     int			picw;
36     int			pich;
37 
38     bmImageSizeTwips( &picwgoal, &pichgoal, bd );
39     picw= (int)( 100000.0* picwgoal )/ ( 20* POINTS_PER_M );
40     pich= (int)( 100000.0* pichgoal )/ ( 20* POINTS_PER_M );
41 
42     sioOutPrintf( sos, "\\picw%d\\pich%d\\picwgoal%d\\pichgoal%d\r\n",
43 					    picw, pich, picwgoal, pichgoal );
44 
45     return 0;
46     }
47 
bmRtfWritePngRtf(const BitmapDescription * bd,const unsigned char * buffer,SimpleOutputStream * sos)48 int bmRtfWritePngRtf(		const BitmapDescription *	bd,
49 				const unsigned char *		buffer,
50 				SimpleOutputStream *		sos )
51     {
52     int				rval= 0;
53     SimpleOutputStream *	sosHex= (SimpleOutputStream *)0;
54     const int			lastNl= 1;
55 
56     bmRtfStartRtf( bd, "\\pngblip", sos );
57     bmRtfImageSize( bd, sos );
58 
59     sosHex= sioOutHexOpenFolded( sos, 72, lastNl );
60     if  ( ! sosHex )
61 	{ XDEB(sosHex); return -1;	}
62 
63     rval= bmPngWritePng( bd, buffer, sosHex );
64 
65     sioOutClose( sosHex );
66     sioOutPrintf( sos, "}\\par}\r\n" );
67 
68     return rval;
69     }
70 
bmRtfWriteJfifRtf(const BitmapDescription * bd,const unsigned char * buffer,SimpleOutputStream * sos)71 int bmRtfWriteJfifRtf(		const BitmapDescription *	bd,
72 				const unsigned char *		buffer,
73 				SimpleOutputStream *		sos )
74     {
75     int				rval= 0;
76     SimpleOutputStream *	sosHex= (SimpleOutputStream *)0;
77     const int			lastNl= 1;
78 
79     bmRtfStartRtf( bd, "\\jpegblip", sos );
80     bmRtfImageSize( bd, sos );
81 
82     sosHex= sioOutHexOpenFolded( sos, 72, lastNl );
83     if  ( ! sosHex )
84 	{ XDEB(sosHex); return -1;	}
85 
86     rval= bmJpegWriteJfif( bd, buffer, sosHex );
87 
88     sioOutClose( sosHex );
89     sioOutPrintf( sos, "}\\par}\r\n" );
90 
91     return rval;
92     }
93 
bmRtfWriteWmfRtf(const BitmapDescription * bd,const unsigned char * buffer,SimpleOutputStream * sos)94 int bmRtfWriteWmfRtf(		const BitmapDescription *	bd,
95 				const unsigned char *		buffer,
96 				SimpleOutputStream *		sos )
97     {
98     int				rval= 0;
99     SimpleOutputStream *	sosHex= (SimpleOutputStream *)0;
100     const int			lastNl= 1;
101 
102     sosHex= sioOutHexOpenFolded( sos, 72, lastNl );
103     if  ( ! sosHex )
104 	{ XDEB(sosHex); return -1;	}
105 
106     bmRtfStartRtf( bd, "\\wmetafile8\\picbmp", sos );
107     sioOutPrintf( sos, "\\picbpp%d", bd->bdBitsPerPixel );
108     bmRtfImageSize( bd, sos );
109 
110     rval= bmWmfWriteWmf( bd, buffer, sosHex );
111 
112     sioOutClose( sosHex );
113     sioOutPrintf( sos, "}\\par}\r\n" );
114 
115     return rval;
116     }
117 
118 /************************************************************************/
119 /*									*/
120 /*  Write a bitmap to an rtf stream.					*/
121 /*									*/
122 /************************************************************************/
123 
bmRtfWriteRtf(const BitmapDescription * bd,const unsigned char * buffer,SimpleOutputStream * sos)124 int bmRtfWriteRtf(		const BitmapDescription *	bd,
125 				const unsigned char *		buffer,
126 				SimpleOutputStream *		sos )
127     { return bmRtfWritePngRtf( bd, buffer, sos ); }
128 
129 /************************************************************************/
130 /*									*/
131 /*  Can write a bitmap to an RTF file?					*/
132 /*									*/
133 /************************************************************************/
134 
bmCanWriteRtfFile(const BitmapDescription * bd,int privateFormat)135 int bmCanWriteRtfFile(	const BitmapDescription *	bd,
136 			int				privateFormat )
137     {
138     switch( privateFormat )
139 	{
140 	case 0:
141 	    return bmCanWritePngFile( bd, 1 );
142 	case 1:
143 	    return bmCanWriteJpegFile( bd, 1 );
144 	case 2:
145 	    return bmCanWriteWmfFile( bd, 1 );
146 	default:
147 	    LDEB(privateFormat); return -1;
148 	}
149     }
150 
bmWriteRtfFile(const MemoryBuffer * filename,const unsigned char * buffer,const BitmapDescription * bd,int privateFormat)151 int bmWriteRtfFile(	const MemoryBuffer *		filename,
152 			const unsigned char *		buffer,
153 			const BitmapDescription *	bd,
154 			int				privateFormat )
155     {
156     int				rval= 0;
157     SimpleOutputStream *	sos;
158 
159     sos= sioOutFileioOpen( filename );
160     if  ( ! sos )
161 	{ XDEB(sos); return -1;	}
162 
163     switch( privateFormat )
164 	{
165 	case 0:
166 	    rval= bmRtfWritePngRtf( bd, buffer, sos );
167 	    break;
168 	case 1:
169 	    rval= bmRtfWriteJfifRtf( bd, buffer, sos );
170 	    break;
171 	case 2:
172 	    rval= bmRtfWriteWmfRtf( bd, buffer, sos );
173 	    break;
174 	default:
175 	    LDEB(privateFormat); rval= -1;
176 	}
177 
178     sioOutClose( sos );
179 
180     return rval;
181     }
182 
183