/[zanavi_public1]/navit/navit/graphics/win32/xpm2bmp.c
ZANavi

Contents of /navit/navit/graphics/win32/xpm2bmp.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (show annotations) (download)
Fri Oct 28 21:19:04 2011 UTC (12 years, 5 months ago) by zoff99
File MIME type: text/plain
File size: 16479 byte(s)
import files
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <windows.h>
4 #include <wingdi.h>
5 #include <glib/glib.h>
6 #include "xpm2bmp.h"
7
8 /* #define _DBG */
9
10 // function prototypes
11 static int CreateBitmapFromXpm( const char* filename, PXPM2BMP pXpm2bmp );
12
13 // typedefs
14 static XPMCOLORENTRY theRGBRecords[] =
15 {
16 {"ALICEBLUE", 240, 248, 255},
17 {"ANTIQUEWHITE", 250, 235, 215},
18 {"AQUAMARINE", 50, 191, 193},
19 {"AZURE", 240, 255, 255},
20 {"BEIGE", 245, 245, 220},
21 {"BISQUE", 255, 228, 196},
22 {"BLACK", 0, 0, 0},
23 {"BLANCHEDALMOND", 255, 235, 205},
24 {"BLUE", 0, 0, 255},
25 {"BLUEVIOLET", 138, 43, 226},
26 {"BROWN", 165, 42, 42},
27 {"BURLYWOOD", 222, 184, 135},
28 {"CADETBLUE", 95, 146, 158},
29 {"CHARTREUSE", 127, 255, 0},
30 {"CHOCOLATE", 210, 105, 30},
31 {"CORAL", 255, 114, 86},
32 {"CORNFLOWERBLUE", 34, 34, 152},
33 {"CORNSILK", 255, 248, 220},
34 {"CYAN", 0, 255, 255},
35 {"DARKGOLDENROD", 184, 134, 11},
36 {"DARKGREEN", 0, 86, 45},
37 {"DARKKHAKI", 189, 183, 107},
38 {"DARKOLIVEGREEN", 85, 86, 47},
39 {"DARKORANGE", 255, 140, 0},
40 {"DARKORCHID", 139, 32, 139},
41 {"DARKSALMON", 233, 150, 122},
42 {"DARKSEAGREEN", 143, 188, 143},
43 {"DARKSLATEBLUE", 56, 75, 102},
44 {"DARKSLATEGRAY", 47, 79, 79},
45 {"DARKTURQUOISE", 0, 166, 166},
46 {"DARKVIOLET", 148, 0, 211},
47 {"DEEPPINK", 255, 20, 147},
48 {"DEEPSKYBLUE", 0, 191, 255},
49 {"DIMGRAY", 84, 84, 84},
50 {"DODGERBLUE", 30, 144, 255},
51 {"FIREBRICK", 142, 35, 35},
52 {"FLORALWHITE", 255, 250, 240},
53 {"FORESTGREEN", 80, 159, 105},
54 {"GAINSBORO", 220, 220, 220},
55 {"GHOSTWHITE", 248, 248, 255},
56 {"GOLD", 218, 170, 0},
57 {"GOLDENROD", 239, 223, 132},
58 {"GRAY", 126, 126, 126},
59 {"GRAY0", 0, 0, 0},
60 {"GRAY1", 3, 3, 3},
61 {"GRAY10", 26, 26, 26},
62 {"GRAY100", 255, 255, 255},
63 {"GRAY11", 28, 28, 28},
64 {"GRAY12", 31, 31, 31},
65 {"GRAY13", 33, 33, 33},
66 {"GRAY14", 36, 36, 36},
67 {"GRAY15", 38, 38, 38},
68 {"GRAY16", 41, 41, 41},
69 {"GRAY17", 43, 43, 43},
70 {"GRAY18", 46, 46, 46},
71 {"GRAY19", 48, 48, 48},
72 {"GRAY2", 5, 5, 5},
73 {"GRAY20", 51, 51, 51},
74 {"GRAY21", 54, 54, 54},
75 {"GRAY22", 56, 56, 56},
76 {"GRAY23", 59, 59, 59},
77 {"GRAY24", 61, 61, 61},
78 {"GRAY25", 64, 64, 64},
79 {"GRAY26", 66, 66, 66},
80 {"GRAY27", 69, 69, 69},
81 {"GRAY28", 71, 71, 71},
82 {"GRAY29", 74, 74, 74},
83 {"GRAY3", 8, 8, 8},
84 {"GRAY30", 77, 77, 77},
85 {"GRAY31", 79, 79, 79},
86 {"GRAY32", 82, 82, 82},
87 {"GRAY33", 84, 84, 84},
88 {"GRAY34", 87, 87, 87},
89 {"GRAY35", 89, 89, 89},
90 {"GRAY36", 92, 92, 92},
91 {"GRAY37", 94, 94, 94},
92 {"GRAY38", 97, 97, 97},
93 {"GRAY39", 99, 99, 99},
94 {"GRAY4", 10, 10, 10},
95 {"GRAY40", 102, 102, 102},
96 {"GRAY41", 105, 105, 105},
97 {"GRAY42", 107, 107, 107},
98 {"GRAY43", 110, 110, 110},
99 {"GRAY44", 112, 112, 112},
100 {"GRAY45", 115, 115, 115},
101 {"GRAY46", 117, 117, 117},
102 {"GRAY47", 120, 120, 120},
103 {"GRAY48", 122, 122, 122},
104 {"GRAY49", 125, 125, 125},
105 {"GRAY5", 13, 13, 13},
106 {"GRAY50", 127, 127, 127},
107 {"GRAY51", 130, 130, 130},
108 {"GRAY52", 133, 133, 133},
109 {"GRAY53", 135, 135, 135},
110 {"GRAY54", 138, 138, 138},
111 {"GRAY55", 140, 140, 140},
112 {"GRAY56", 143, 143, 143},
113 {"GRAY57", 145, 145, 145},
114 {"GRAY58", 148, 148, 148},
115 {"GRAY59", 150, 150, 150},
116 {"GRAY6", 15, 15, 15},
117 {"GRAY60", 153, 153, 153},
118 {"GRAY61", 156, 156, 156},
119 {"GRAY62", 158, 158, 158},
120 {"GRAY63", 161, 161, 161},
121 {"GRAY64", 163, 163, 163},
122 {"GRAY65", 166, 166, 166},
123 {"GRAY66", 168, 168, 168},
124 {"GRAY67", 171, 171, 171},
125 {"GRAY68", 173, 173, 173},
126 {"GRAY69", 176, 176, 176},
127 {"GRAY7", 18, 18, 18},
128 {"GRAY70", 179, 179, 179},
129 {"GRAY71", 181, 181, 181},
130 {"GRAY72", 184, 184, 184},
131 {"GRAY73", 186, 186, 186},
132 {"GRAY74", 189, 189, 189},
133 {"GRAY75", 191, 191, 191},
134 {"GRAY76", 194, 194, 194},
135 {"GRAY77", 196, 196, 196},
136 {"GRAY78", 199, 199, 199},
137 {"GRAY79", 201, 201, 201},
138 {"GRAY8", 20, 20, 20},
139 {"GRAY80", 204, 204, 204},
140 {"GRAY81", 207, 207, 207},
141 {"GRAY82", 209, 209, 209},
142 {"GRAY83", 212, 212, 212},
143 {"GRAY84", 214, 214, 214},
144 {"GRAY85", 217, 217, 217},
145 {"GRAY86", 219, 219, 219},
146 {"GRAY87", 222, 222, 222},
147 {"GRAY88", 224, 224, 224},
148 {"GRAY89", 227, 227, 227},
149 {"GRAY9", 23, 23, 23},
150 {"GRAY90", 229, 229, 229},
151 {"GRAY91", 232, 232, 232},
152 {"GRAY92", 235, 235, 235},
153 {"GRAY93", 237, 237, 237},
154 {"GRAY94", 240, 240, 240},
155 {"GRAY95", 242, 242, 242},
156 {"GRAY96", 245, 245, 245},
157 {"GRAY97", 247, 247, 247},
158 {"GRAY98", 250, 250, 250},
159 {"GRAY99", 252, 252, 252},
160 {"GREEN", 0, 255, 0},
161 {"GREENYELLOW", 173, 255, 47},
162 {"HONEYDEW", 240, 255, 240},
163 {"HOTPINK", 255, 105, 180},
164 {"INDIANRED", 107, 57, 57},
165 {"IVORY", 255, 255, 240},
166 {"KHAKI", 179, 179, 126},
167 {"LAVENDER", 230, 230, 250},
168 {"LAVENDERBLUSH", 255, 240, 245},
169 {"LAWNGREEN", 124, 252, 0},
170 {"LEMONCHIFFON", 255, 250, 205},
171 {"LIGHTBLUE", 176, 226, 255},
172 {"LIGHTCORAL", 240, 128, 128},
173 {"LIGHTCYAN", 224, 255, 255},
174 {"LIGHTGOLDENROD", 238, 221, 130},
175 {"LIGHTGOLDENRODYELLOW", 250, 250, 210},
176 {"LIGHTGRAY", 168, 168, 168},
177 {"LIGHTPINK", 255, 182, 193},
178 {"LIGHTSALMON", 255, 160, 122},
179 {"LIGHTSEAGREEN", 32, 178, 170},
180 {"LIGHTSKYBLUE", 135, 206, 250},
181 {"LIGHTSLATEBLUE", 132, 112, 255},
182 {"LIGHTSLATEGRAY", 119, 136, 153},
183 {"LIGHTSTEELBLUE", 124, 152, 211},
184 {"LIGHTYELLOW", 255, 255, 224},
185 {"LIMEGREEN", 0, 175, 20},
186 {"LINEN", 250, 240, 230},
187 {"MAGENTA", 255, 0, 255},
188 {"MAROON", 143, 0, 82},
189 {"MEDIUMAQUAMARINE", 0, 147, 143},
190 {"MEDIUMBLUE", 50, 50, 204},
191 {"MEDIUMFORESTGREEN", 50, 129, 75},
192 {"MEDIUMGOLDENROD", 209, 193, 102},
193 {"MEDIUMORCHID", 189, 82, 189},
194 {"MEDIUMPURPLE", 147, 112, 219},
195 {"MEDIUMSEAGREEN", 52, 119, 102},
196 {"MEDIUMSLATEBLUE", 106, 106, 141},
197 {"MEDIUMSPRINGGREEN", 35, 142, 35},
198 {"MEDIUMTURQUOISE", 0, 210, 210},
199 {"MEDIUMVIOLETRED", 213, 32, 121},
200 {"MIDNIGHTBLUE", 47, 47, 100},
201 {"MINTCREAM", 245, 255, 250},
202 {"MISTYROSE", 255, 228, 225},
203 {"MOCCASIN", 255, 228, 181},
204 {"NAVAJOWHITE", 255, 222, 173},
205 {"NAVY", 35, 35, 117},
206 {"NAVYBLUE", 35, 35, 117},
207 {"OLDLACE", 253, 245, 230},
208 {"OLIVEDRAB", 107, 142, 35},
209 {"ORANGE", 255, 135, 0},
210 {"ORANGERED", 255, 69, 0},
211 {"ORCHID", 239, 132, 239},
212 {"PALEGOLDENROD", 238, 232, 170},
213 {"PALEGREEN", 115, 222, 120},
214 {"PALETURQUOISE", 175, 238, 238},
215 {"PALEVIOLETRED", 219, 112, 147},
216 {"PAPAYAWHIP", 255, 239, 213},
217 {"PEACHPUFF", 255, 218, 185},
218 {"PERU", 205, 133, 63},
219 {"PINK", 255, 181, 197},
220 {"PLUM", 197, 72, 155},
221 {"POWDERBLUE", 176, 224, 230},
222 {"PURPLE", 160, 32, 240},
223 {"RED", 255, 0, 0},
224 {"ROSYBROWN", 188, 143, 143},
225 {"ROYALBLUE", 65, 105, 225},
226 {"SADDLEBROWN", 139, 69, 19},
227 {"SALMON", 233, 150, 122},
228 {"SANDYBROWN", 244, 164, 96},
229 {"SEAGREEN", 82, 149, 132},
230 {"SEASHELL", 255, 245, 238},
231 {"SIENNA", 150, 82, 45},
232 {"SKYBLUE", 114, 159, 255},
233 {"SLATEBLUE", 126, 136, 171},
234 {"SLATEGRAY", 112, 128, 144},
235 {"SNOW", 255, 250, 250},
236 {"SPRINGGREEN", 65, 172, 65},
237 {"STEELBLUE", 84, 112, 170},
238 {"TAN", 222, 184, 135},
239 {"THISTLE", 216, 191, 216},
240 {"TOMATO", 255, 99, 71},
241 {"TRANSPARENT", 0, 0, 1},
242 {"TURQUOISE", 25, 204, 223},
243 {"VIOLET", 156, 62, 206},
244 {"VIOLETRED", 243, 62, 150},
245 {"WHEAT", 245, 222, 179},
246 {"WHITE", 255, 255, 255},
247 {"WHITESMOKE", 245, 245, 245},
248 {"YELLOW", 255, 255, 0},
249 {"YELLOWGREEN", 50, 216, 56}
250 };
251
252
253 PXPM2BMP Xpm2bmp_new(void)
254 {
255 PXPM2BMP preturn = g_malloc0( sizeof(XPM2BMP) );
256 return preturn;
257 }
258
259
260 int Xpm2bmp_load( PXPM2BMP pXpm2bmp, const char* filename )
261 {
262 return CreateBitmapFromXpm( filename, pXpm2bmp );
263 }
264
265 int Xpm2bmp_paint( PXPM2BMP pXpm2bmp, HDC hdc, int x1,int y1 )
266 {
267 StretchDIBits(hdc,
268 x1, y1, pXpm2bmp->size_x, pXpm2bmp->size_y,
269 0, 0, pXpm2bmp->size_x, pXpm2bmp->size_y,
270 pXpm2bmp->wimage_data_trans,
271 (BITMAPINFO *)pXpm2bmp->bmih_trans,
272 DIB_RGB_COLORS,
273 SRCAND );
274
275 StretchDIBits(hdc,
276 x1, y1, pXpm2bmp->size_x, pXpm2bmp->size_y,
277 0, 0, pXpm2bmp->size_x, pXpm2bmp->size_y,
278 pXpm2bmp->wimage_data,
279 (BITMAPINFO *)pXpm2bmp->bmih,
280 DIB_RGB_COLORS,
281 SRCPAINT );
282
283 return 0;
284 }
285
286 static int parse_line_values( const char* line, PXPM2BMP pXpm2bmp )
287 {
288 int return_value = 0;
289 char* parse_line = (char*)line;
290 char* tok;
291 int value_pos = 0;
292
293 parse_line = strchr( parse_line, '"' );
294 parse_line++;
295
296 tok = strtok( parse_line, " \t\n" );
297
298 while ( tok != 0 )
299 {
300 int val = atoi( tok );
301 switch ( value_pos )
302 {
303 case 0: pXpm2bmp->size_x = val; break;
304 case 1: pXpm2bmp->size_y = val; break;
305 case 2: pXpm2bmp->colors = val; break;
306 case 3: pXpm2bmp->chars_per_pixel = val; break;
307 case 4: pXpm2bmp->hotspot_x = val; break;
308 case 5: pXpm2bmp->hotspot_y = val; break;
309 }
310 tok = strtok( NULL, " \t" );
311 value_pos ++;
312
313 }
314
315 return return_value;
316 }
317
318 static int hex2int( char c )
319 {
320 if ((c >= '0') && (c <='9' )) return c - '0';
321 if ((c >= 'A') && (c <= 'F')) return c - 'A' + 10;
322 if ((c >= 'a') && (c <= 'f')) return c - 'a' + 10;
323 return -1;
324 }
325
326 static DWORD string2hex16( const char* str )
327 {
328 int i1 = hex2int( str[0] );
329 int i2 = hex2int( str[1] );
330 if ( ( i1 >= 0 ) && ( i2 >= 0 ) )
331 return i1*16+i2;
332 return -1;
333 }
334
335 static int parse_color_values( const char* line, PXPM2BMP pXpm2bmp )
336 {
337 int return_value = 0;
338 char* cq = strchr( line, '"' );
339 char* cchar = strchr( cq+pXpm2bmp->chars_per_pixel+1, 'c' );
340 char* chash = strchr( cq+pXpm2bmp->chars_per_pixel+1, '#' );
341 char* qe = strchr( cq+pXpm2bmp->chars_per_pixel+1, '"' );
342
343 cq++;
344
345 if ( cq )
346 {
347 memcpy( pXpm2bmp->color_entires[ pXpm2bmp-> color_entires_size].color_str, cq, pXpm2bmp->chars_per_pixel + 1 );
348 pXpm2bmp->color_entires[ pXpm2bmp-> color_entires_size].color_str[ pXpm2bmp->chars_per_pixel ] = '\0';
349
350
351 if ( cchar && chash && qe)
352 {
353 int len;
354 chash++;
355 *qe = 0;
356 len = strlen( chash );
357
358 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].r = string2hex16( &chash[0] );
359 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].g = string2hex16( &chash[len / 3] );
360 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].b = string2hex16( &chash[len * 2 / 3] );
361 #ifdef _DBG
362 printf( "adding color %s => %d RGB %x %x %x to index %d\n",
363 line,
364 pXpm2bmp->color_entires_size,
365 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].r,
366 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].g,
367 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].b,
368 pXpm2bmp->color_entires_size );
369 #endif
370 }
371 else
372 {
373 int q;
374 char *start = cchar + 1;
375 char *end = start;
376
377 while ( *start != 0 )
378 {
379 if ( ( *start != '\t' ) && ( *start != ' ' ) )
380 {
381 break;
382 }
383 start++;
384 }
385
386 end = start;
387 while ( *end != 0 )
388 {
389 if ( ( *end == '\t' ) || ( *end == ' ' ) || ( *end == '"' ))
390 {
391 *end = 0;
392 }
393 end++;
394 }
395
396 start = _strupr( start );
397
398 for ( q=0; q < sizeof( theRGBRecords ) / sizeof( theRGBRecords[0] ); q++ )
399 {
400
401 if ( 0 == strcmp( start, theRGBRecords[q].color_str ) )
402 {
403 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].r = theRGBRecords[q].r;
404 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].g = theRGBRecords[q].g;
405 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].b = theRGBRecords[q].b;
406 }
407 }
408 if ( 0 == strcmp( start, "NONE" ) )
409 {
410 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].r = 255;
411 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].g = 0;
412 pXpm2bmp->color_entires[ pXpm2bmp->color_entires_size].b = 255;
413 }
414 }
415 }
416 pXpm2bmp->color_entires_size++;
417
418 return return_value;
419 }
420
421 static int vv = 0;
422
423 static int parse_pixel_line_values( const char* line, PXPM2BMP pXpm2bmp, unsigned char* pixel_data, unsigned char* pixel_data_trans )
424 {
425 int return_value = 0;
426 int i,j;
427
428
429 char* cq = strchr( line, '"' );
430 int pix_idx = 0;
431 int size_x = pXpm2bmp->size_x;
432 int len = strlen( cq );
433
434 cq++;
435
436 if ( len > pXpm2bmp->chars_per_pixel * size_x )
437 {
438 for ( i=0; i< size_x; i++ )
439 {
440 int found = 0;
441 char* cmp = &cq[ i * pXpm2bmp->chars_per_pixel];
442
443 for ( j=0; j< pXpm2bmp-> color_entires_size; j++ )
444 {
445 if ( strncmp( cmp, pXpm2bmp->color_entires[ j ].color_str, pXpm2bmp->chars_per_pixel ) == 0 )
446 {
447 int r = pXpm2bmp->color_entires[ j ].r;
448 int g = pXpm2bmp->color_entires[ j ].g;
449 int b = pXpm2bmp->color_entires[ j ].b;
450
451 if ( ( r == 255 ) && ( g == 0 ) && ( r == 255 ) )
452 {
453 r=g=b=0;
454 pixel_data_trans[ pix_idx ] = 255;
455 pixel_data_trans[ pix_idx+1 ] = 255;
456 pixel_data_trans[ pix_idx+2 ] = 255;
457 }
458 else
459 {
460 pixel_data_trans[ pix_idx ] = 0;
461 pixel_data_trans[ pix_idx+1 ] = 0;
462 pixel_data_trans[ pix_idx+2 ] = 0;
463 }
464
465 // pixel_data[ pix_idx++ ] = pXpm2bmp->color_entires[ j ].r;
466 // pixel_data[ pix_idx++ ] = pXpm2bmp->color_entires[ j ].g;
467 // pixel_data[ pix_idx++ ] = pXpm2bmp->color_entires[ j ].b;
468 pixel_data[ pix_idx++ ] = b;
469 pixel_data[ pix_idx++ ] = g;
470 pixel_data[ pix_idx++ ] = r;
471 found = 1;
472 vv++;
473 break;
474 }
475 }
476 if ( !found )
477 {
478 fprintf( stderr, "XPMLIB: error color not found\n" );
479 }
480
481 }
482 }
483 else
484 {
485 return_value = -1;
486 fprintf( stderr, "XPMLIB: invalid line length\n" );
487 }
488 return return_value;
489 }
490
491
492 static int CreateBitmapFromXpm( const char* filename, PXPM2BMP pXpm2bmp )
493 {
494 int return_val = 0;
495 unsigned char i, row;
496 char line[ 1024 ];
497 int nbytes ;
498 FILE* file_xpm = fopen( filename, "r" );
499
500 int phase = 0;
501 row = 0;
502
503 if ( file_xpm )
504 {
505 while ( fgets(line, sizeof( line ), file_xpm ) )
506 {
507 #ifdef _DBG
508 printf( "PARSING: %s\n", line );
509 #endif
510 if ( line[ 0 ] != '"' )
511 continue;
512
513 switch ( phase )
514 {
515 case 0:
516 parse_line_values( line, pXpm2bmp );
517 #ifdef _DBG
518 printf( "size_x %d\n", pXpm2bmp->size_x );
519 printf( "size_y %d\n", pXpm2bmp->size_y );
520 #endif
521 phase = 1;
522
523 pXpm2bmp->color_entires_size = 0;
524 nbytes = ( pXpm2bmp->chars_per_pixel + 1 ) * pXpm2bmp->colors;
525
526 pXpm2bmp->color_entires = g_malloc0( sizeof(XPMCOLORENTRY) * (pXpm2bmp->colors + 100) );
527 pXpm2bmp->color_entires[0].color_str = g_malloc0( nbytes * pXpm2bmp->colors );
528 for ( i = 1; i< pXpm2bmp->colors; i++ )
529 {
530 pXpm2bmp->color_entires[i].color_str = pXpm2bmp->color_entires[0].color_str + ( pXpm2bmp->chars_per_pixel + 1 ) * i;
531 }
532
533 if (!(pXpm2bmp->dib = (unsigned char *)g_malloc(sizeof(BITMAPINFOHEADER) + pXpm2bmp->size_x * pXpm2bmp->size_y * 3)))
534 {
535 return 4;
536 }
537 if (!(pXpm2bmp->dib_trans = (unsigned char *)g_malloc0(sizeof(BITMAPINFOHEADER) + pXpm2bmp->size_x * pXpm2bmp->size_y * 3)))
538 {
539 return 4;
540 }
541
542 memset(pXpm2bmp->dib, 0, sizeof(BITMAPINFOHEADER));
543 pXpm2bmp->bmih = (BITMAPINFOHEADER *)pXpm2bmp->dib;
544 pXpm2bmp->bmih->biSize = sizeof(BITMAPINFOHEADER);
545 pXpm2bmp->bmih->biWidth = pXpm2bmp->size_x;
546 pXpm2bmp->bmih->biHeight = -((long)pXpm2bmp->size_y);
547 pXpm2bmp->bmih->biPlanes = 1;
548 pXpm2bmp->bmih->biBitCount = 24;
549 pXpm2bmp->bmih->biCompression = 0;
550 pXpm2bmp->wimage_data = pXpm2bmp->dib + sizeof(BITMAPINFOHEADER);
551
552
553 pXpm2bmp->bmih_trans = (BITMAPINFOHEADER *)pXpm2bmp->dib_trans;
554 pXpm2bmp->bmih_trans->biSize = sizeof(BITMAPINFOHEADER);
555 pXpm2bmp->bmih_trans->biWidth = pXpm2bmp->size_x;
556 pXpm2bmp->bmih_trans->biHeight = -((long)pXpm2bmp->size_y);
557 pXpm2bmp->bmih_trans->biPlanes = 1;
558 pXpm2bmp->bmih_trans->biBitCount = 24;
559 pXpm2bmp->bmih_trans->biCompression = 0;
560 pXpm2bmp->wimage_data_trans = pXpm2bmp->dib_trans + sizeof(BITMAPINFOHEADER);
561 // memset( pXpm2bmp->wimage_data_trans, 255, 5* 22 * 3 );
562
563 break;
564 case 1:
565 parse_color_values( line, pXpm2bmp );
566 if ( pXpm2bmp->color_entires_size >= pXpm2bmp->colors )
567 {
568 phase = 2;
569 }
570
571 break;
572 case 2:
573 parse_pixel_line_values( line, pXpm2bmp,
574 pXpm2bmp->wimage_data + row * pXpm2bmp->size_x * 3,
575 pXpm2bmp->wimage_data_trans + row * pXpm2bmp->size_x * 3 );
576
577 row++;
578 if ( row >= pXpm2bmp->size_y )
579 {
580 phase = 3;
581 }
582 break;
583 }
584
585 }
586
587 fclose( file_xpm );
588 }
589 return return_val;
590 }

   
Visit the ZANavi Wiki