[svn] / branches / dev-api-4 / xvidcore / src / image / font.c Repository:
ViewVC logotype

Annotation of /branches/dev-api-4/xvidcore/src/image/font.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1053 - (view) (download)

1 : edgomez 851 /******************************************************************************
2 :     * *
3 :     * This file is part of XviD, a free MPEG-4 video encoder/decoder *
4 :     * *
5 :     * XviD is free software; you can redistribute it and/or modify it *
6 :     * under the terms of the GNU General Public License as published by *
7 :     * the Free Software Foundation; either version 2 of the License, or *
8 :     * (at your option) any later version. *
9 :     * *
10 :     * XviD is distributed in the hope that it will be useful, but *
11 :     * WITHOUT ANY WARRANTY; without even the implied warranty of *
12 :     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 :     * GNU General Public License for more details. *
14 :     * *
15 :     * You should have received a copy of the GNU General Public License *
16 :     * along with this program; if not, write to the Free Software *
17 :     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
18 :     * *
19 :     ******************************************************************************/
20 :    
21 :     /******************************************************************************
22 :     * *
23 :     * font.c *
24 :     * *
25 :     * Copyright (C) 2001 - Peter Ross <suxen_drol@hotmail.com> *
26 :     * *
27 :     * For more information visit the XviD homepage: http://www.xvid.org *
28 :     * *
29 :     ******************************************************************************/
30 :    
31 :     /******************************************************************************
32 :     * *
33 :     * Revision history: *
34 :     * *
35 :     * 22.06.2002 inital version *
36 :     * *
37 :     ******************************************************************************/
38 :    
39 :     #include <stdio.h>
40 :     #include <stdarg.h>
41 :    
42 :     #include "image.h"
43 :     #include "font.h"
44 :    
45 :     #define FONT_WIDTH 4
46 :     #define FONT_HEIGHT 6
47 :    
48 :    
49 :     static const char ascii33[33][FONT_WIDTH*FONT_HEIGHT] = {
50 : edgomez 1053
51 :     /* ! */
52 :     {0,0,1,0,
53 :     0,0,1,0,
54 :     0,0,1,0,
55 :     0,0,1,0,
56 :     0,0,0,0,
57 :     0,0,1,0},
58 : edgomez 851
59 : edgomez 1053 /* " */
60 :     {0,1,0,1,
61 :     0,1,0,1,
62 :     0,0,0,0,
63 :     0,0,0,0,
64 :     0,0,0,0,
65 :     0,0,0,0},
66 : edgomez 851
67 : edgomez 1053 /* # */
68 :     {0,1,1,0,
69 :     1,1,1,1,
70 :     0,1,1,0,
71 :     0,1,1,0,
72 :     1,1,1,1,
73 :     0,1,1,0},
74 : edgomez 851
75 : edgomez 1053 /* $ */
76 :     {0,1,1,0,
77 :     1,0,1,1,
78 :     1,1,1,0,
79 :     0,1,1,1,
80 :     1,1,0,1,
81 :     0,1,1,0},
82 :    
83 :     /* % */
84 :     {1,1,0,1,
85 :     1,0,0,1,
86 :     0,0,1,0,
87 :     0,1,0,0,
88 :     1,0,0,1,
89 :     1,0,1,1},
90 : edgomez 851
91 : edgomez 1053 /* & */
92 :     {0,1,1,0,
93 :     1,0,0,0,
94 :     0,1,0,1,
95 :     1,0,1,0,
96 :     1,0,1,0,
97 :     0,1,0,1},
98 : edgomez 851
99 : edgomez 1053 /* ' */
100 :     {0,0,1,0,
101 :     0,0,1,0,
102 :     0,0,0,0,
103 :     0,0,0,0,
104 :     0,0,0,0,
105 :     0,0,0,0},
106 : edgomez 851
107 : edgomez 1053 /* ( */
108 :     {0,0,1,0,
109 :     0,1,0,0,
110 :     0,1,0,0,
111 :     0,1,0,0,
112 :     0,1,0,0,
113 :     0,0,1,0},
114 : edgomez 851
115 : edgomez 1053 /* ) */
116 :     {0,1,0,0,
117 :     0,0,1,0,
118 :     0,0,1,0,
119 :     0,0,1,0,
120 :     0,0,1,0,
121 :     0,1,0,0},
122 : edgomez 851
123 : edgomez 1053 /* * */
124 :     {0,0,0,0,
125 :     1,0,0,1,
126 :     0,1,1,0,
127 :     1,1,1,1,
128 :     0,1,1,0,
129 :     1,0,0,1},
130 : edgomez 851
131 : edgomez 1053 /* + */
132 :     {0,0,0,0,
133 :     0,0,1,0,
134 :     0,0,1,0,
135 :     0,1,1,1,
136 :     0,0,1,0,
137 :     0,0,1,0},
138 : edgomez 851
139 : edgomez 1053 /* , */
140 :     {0,0,0,0,
141 :     0,0,0,0,
142 :     0,0,0,0,
143 :     0,0,0,0,
144 :     0,1,1,0,
145 :     0,0,1,0},
146 : edgomez 851
147 : edgomez 1053 /* - */
148 :     {0,0,0,0,
149 :     0,0,0,0,
150 :     0,0,0,0,
151 :     1,1,1,1,
152 :     0,0,0,0,
153 :     0,0,0,0},
154 : edgomez 851
155 : edgomez 1053 /* . */
156 :     {0,0,0,0,
157 :     0,0,0,0,
158 :     0,0,0,0,
159 :     0,0,0,0,
160 :     0,1,1,0,
161 :     0,1,1,0},
162 : edgomez 851
163 : edgomez 1053 /* / */
164 :     {0,0,0,1,
165 :     0,0,0,1,
166 :     0,0,1,0,
167 :     0,1,0,0,
168 :     1,0,0,0,
169 :     1,0,0,0},
170 : edgomez 851
171 : edgomez 1053 /* 0 */
172 :     {0,1,1,0,
173 :     1,0,0,1,
174 :     1,0,1,1,
175 :     1,1,0,1,
176 :     1,0,0,1,
177 :     0,1,1,0},
178 : edgomez 851
179 : edgomez 1053 /* 1 */
180 :     {0,0,1,0,
181 :     0,0,1,0,
182 :     0,0,1,0,
183 :     0,0,1,0,
184 :     0,0,1,0,
185 :     0,0,1,0},
186 : edgomez 851
187 : edgomez 1053 /* 2 */
188 :     {0,1,1,0,
189 :     1,0,0,1,
190 :     0,0,1,0,
191 :     0,1,0,0,
192 :     1,0,0,0,
193 :     1,1,1,1},
194 : edgomez 851
195 : edgomez 1053 /* 3 */
196 :     {0,1,1,0,
197 :     1,0,0,1,
198 :     0,0,1,0,
199 :     0,0,0,1,
200 :     1,0,0,1,
201 :     0,1,1,0},
202 : edgomez 851
203 : edgomez 1053 /* 4 */
204 :     {0,0,1,0,
205 :     0,1,1,0,
206 :     1,0,1,0,
207 :     1,1,1,1,
208 :     0,0,1,0,
209 :     0,0,1,0},
210 : edgomez 851
211 : edgomez 1053 /* 5 */
212 :     {1,1,1,1,
213 :     1,0,0,0,
214 :     1,1,1,0,
215 :     0,0,0,1,
216 :     1,0,0,1,
217 :     0,1,1,0},
218 : edgomez 851
219 : edgomez 1053 /* 6 */
220 :     {0,1,1,1,
221 :     1,0,0,0,
222 :     1,1,1,0,
223 :     1,0,0,1,
224 :     1,0,0,1,
225 :     0,1,1,0},
226 : edgomez 851
227 : edgomez 1053 /* 7 */
228 :     {1,1,1,0,
229 :     0,0,0,1,
230 :     0,0,0,1,
231 :     0,0,1,0,
232 :     0,0,1,0,
233 :     0,0,1,0},
234 : edgomez 851
235 : edgomez 1053 /* 8 */
236 :     {0,1,1,0,
237 :     1,0,0,1,
238 :     0,1,1,0,
239 :     1,0,0,1,
240 :     1,0,0,1,
241 :     0,1,1,0},
242 : edgomez 851
243 : edgomez 1053 /* 9 */
244 :     {0,1,1,0,
245 :     1,0,0,1,
246 :     1,0,0,1,
247 :     0,1,1,1,
248 :     0,0,0,1,
249 :     1,1,1,0},
250 : edgomez 851
251 : edgomez 1053 /* : */
252 :     {0,0,0,0,
253 :     0,0,0,0,
254 :     0,0,1,0,
255 :     0,0,0,0,
256 :     0,0,1,0,
257 :     0,0,0,0},
258 : edgomez 851
259 : edgomez 1053 /* ; */
260 :     {0,0,0,0,
261 :     0,0,1,0,
262 :     0,0,0,0,
263 :     0,0,0,0,
264 :     0,1,1,0,
265 :     0,0,1,0},
266 : edgomez 851
267 : edgomez 1053 /* < */
268 :     {0,0,0,1,
269 :     0,0,1,0,
270 :     0,1,0,0,
271 :     0,1,0,0,
272 :     0,0,1,0,
273 :     0,0,0,1},
274 : edgomez 851
275 : edgomez 1053 /* = */
276 :     {0,0,0,0,
277 :     1,1,1,1,
278 :     0,0,0,0,
279 :     0,0,0,0,
280 :     1,1,1,1,
281 :     0,0,0,0},
282 : edgomez 851
283 : edgomez 1053 /* > */
284 :     {0,1,0,0,
285 :     0,0,1,0,
286 :     0,0,0,1,
287 :     0,0,0,1,
288 :     0,0,1,0,
289 :     0,1,0,0},
290 : edgomez 851
291 : edgomez 1053 /* ? */
292 :     {0,1,1,0,
293 :     1,0,0,1,
294 :     0,0,1,0,
295 :     0,0,1,0,
296 :     0,0,0,0,
297 :     0,0,1,0},
298 : edgomez 851
299 : edgomez 1053 /* @ */
300 :     {0,1,1,0,
301 :     1,0,0,1,
302 :     1,0,1,1,
303 :     1,0,1,1,
304 :     1,0,0,0,
305 :     0,1,1,0},
306 : edgomez 851
307 :     };
308 :    
309 :    
310 :     static const char ascii65[26][FONT_WIDTH*FONT_HEIGHT] = {
311 : edgomez 1053 /* A */
312 :     {0,1,1,0,
313 :     1,0,0,1,
314 :     1,0,0,1,
315 :     1,1,1,1,
316 :     1,0,0,1,
317 :     1,0,0,1},
318 : edgomez 851
319 : edgomez 1053 /* B */
320 :     {1,1,1,0,
321 :     1,0,0,1,
322 :     1,1,1,0,
323 :     1,0,0,1,
324 :     1,0,0,1,
325 :     1,1,1,0},
326 : edgomez 851
327 : edgomez 1053 /* C */
328 :     {0,1,1,0,
329 :     1,0,0,1,
330 :     1,0,0,0,
331 :     1,0,0,0,
332 :     1,0,0,1,
333 :     0,1,1,0},
334 : edgomez 851
335 : edgomez 1053 /* D */
336 :     {1,1,0,0,
337 :     1,0,1,0,
338 :     1,0,0,1,
339 :     1,0,0,1,
340 :     1,0,1,0,
341 :     1,1,0,0},
342 : edgomez 851
343 : edgomez 1053 /* E */
344 :     {1,1,1,1,
345 :     1,0,0,0,
346 :     1,1,1,0,
347 :     1,0,0,0,
348 :     1,0,0,0,
349 :     1,1,1,1},
350 : edgomez 851
351 : edgomez 1053 /* F */
352 :     {1,1,1,1,
353 :     1,0,0,0,
354 :     1,1,1,0,
355 :     1,0,0,0,
356 :     1,0,0,0,
357 :     1,0,0,0},
358 : edgomez 851
359 : edgomez 1053 /* G */
360 :     {0,1,1,1,
361 :     1,0,0,0,
362 :     1,0,1,1,
363 :     1,0,0,1,
364 :     1,0,0,1,
365 :     0,1,1,0},
366 : edgomez 851
367 : edgomez 1053 /* H */
368 :     {1,0,0,1,
369 :     1,0,0,1,
370 :     1,1,1,1,
371 :     1,0,0,1,
372 :     1,0,0,1,
373 :     1,0,0,1},
374 : edgomez 851
375 : edgomez 1053 /* I */
376 :     {0,1,1,1,
377 :     0,0,1,0,
378 :     0,0,1,0,
379 :     0,0,1,0,
380 :     0,0,1,0,
381 :     0,1,1,1},
382 : edgomez 851
383 : edgomez 1053 /* J */
384 :     {0,1,1,1,
385 :     0,0,1,0,
386 :     0,0,1,0,
387 :     0,0,1,0,
388 :     1,0,1,0,
389 :     0,1,0,0},
390 : edgomez 851
391 : edgomez 1053 /* K */
392 :     {1,0,0,1,
393 :     1,0,0,1,
394 :     1,1,1,0,
395 :     1,0,0,1,
396 :     1,0,0,1,
397 :     1,0,0,1},
398 : edgomez 851
399 : edgomez 1053 /* L */
400 :     {1,0,0,0,
401 :     1,0,0,0,
402 :     1,0,0,0,
403 :     1,0,0,0,
404 :     1,0,0,0,
405 :     1,1,1,1},
406 : edgomez 851
407 : edgomez 1053 /* M */
408 :     {1,0,0,1,
409 :     1,1,1,1,
410 :     1,1,1,1,
411 :     1,0,0,1,
412 :     1,0,0,1,
413 :     1,0,0,1},
414 : edgomez 851
415 : edgomez 1053 /* N */
416 :     {1,0,0,1,
417 :     1,1,0,1,
418 :     1,1,0,1,
419 :     1,0,1,1,
420 :     1,0,1,1,
421 :     1,0,0,1},
422 : edgomez 851
423 : edgomez 1053 /* 0 */
424 :     {0,1,1,0,
425 :     1,0,0,1,
426 :     1,0,0,1,
427 :     1,0,0,1,
428 :     1,0,0,1,
429 :     0,1,1,0},
430 : edgomez 851
431 : edgomez 1053 /* P */
432 :     {1,1,1,0,
433 :     1,0,0,1,
434 :     1,1,1,0,
435 :     1,0,0,0,
436 :     1,0,0,0,
437 :     1,0,0,0},
438 : edgomez 851
439 : edgomez 1053 /* Q */
440 :     {0,1,1,0,
441 :     1,0,0,1,
442 :     1,0,0,1,
443 :     1,0,0,1,
444 :     1,0,1,0,
445 :     0,1,0,1},
446 : edgomez 851
447 :    
448 : edgomez 1053 /* R */
449 :     {1,1,1,0,
450 :     1,0,0,1,
451 :     1,1,1,0,
452 :     1,0,0,1,
453 :     1,0,0,1,
454 :     1,0,0,1},
455 : edgomez 851
456 : edgomez 1053 /* S */
457 :     {0,1,1,0,
458 :     1,0,0,1,
459 :     0,1,0,0,
460 :     0,0,1,0,
461 :     1,0,0,1,
462 :     0,1,1,0},
463 : edgomez 851
464 : edgomez 1053 /* T */
465 :     {0,1,1,1,
466 :     0,0,1,0,
467 :     0,0,1,0,
468 :     0,0,1,0,
469 :     0,0,1,0,
470 :     0,0,1,0},
471 : edgomez 851
472 : edgomez 1053 /* U */
473 :     {1,0,0,1,
474 :     1,0,0,1,
475 :     1,0,0,1,
476 :     1,0,0,1,
477 :     1,0,0,1,
478 :     1,1,1,1},
479 : edgomez 851
480 : edgomez 1053 /* V */
481 :     {1,0,0,1,
482 :     1,0,0,1,
483 :     1,0,0,1,
484 :     0,1,1,0,
485 :     0,1,1,0,
486 :     0,1,1,0},
487 : edgomez 851
488 : edgomez 1053 /* W */
489 :     {1,0,0,1,
490 :     1,0,0,1,
491 :     1,0,0,1,
492 :     1,1,1,1,
493 :     1,1,1,1,
494 :     1,0,0,1},
495 : edgomez 851
496 : edgomez 1053 /* X */
497 :     {1,0,0,1,
498 :     1,0,0,1,
499 :     0,1,1,0,
500 :     1,0,0,1,
501 :     1,0,0,1,
502 :     1,0,0,1},
503 : edgomez 851
504 : edgomez 1053 /* Y */
505 :     {1,0,0,1,
506 :     1,0,0,1,
507 :     0,1,0,0,
508 :     0,0,1,0,
509 :     0,1,0,0,
510 :     1,0,0,0},
511 : edgomez 851
512 : edgomez 1053 /* Z */
513 :     {1,1,1,1,
514 :     0,0,0,1,
515 :     0,0,1,0,
516 :     0,1,0,0,
517 :     1,0,0,0,
518 :     1,1,1,1},
519 : edgomez 851
520 :     };
521 :    
522 :    
523 :    
524 :     static const char ascii91[6][FONT_WIDTH*FONT_HEIGHT] = {
525 : edgomez 1053 /* [ */
526 :     {0,1,1,0,
527 :     0,1,0,0,
528 :     0,1,0,0,
529 :     0,1,0,0,
530 :     0,1,0,0,
531 :     0,1,1,0},
532 : edgomez 851
533 : edgomez 1053 /* '\' */
534 :     {1,0,0,0,
535 :     1,0,0,0,
536 :     0,1,0,0,
537 :     0,0,1,0,
538 :     0,0,0,1,
539 :     0,0,0,1},
540 : edgomez 851
541 : edgomez 1053 /* ] */
542 :     {0,1,1,0,
543 :     0,0,1,0,
544 :     0,0,1,0,
545 :     0,0,1,0,
546 :     0,0,1,0,
547 :     0,1,1,0},
548 : edgomez 851
549 : edgomez 1053 /* ^ */
550 :     {0,1,0,1,
551 :     0,0,0,0,
552 :     0,0,0,0,
553 :     0,0,0,0,
554 :     0,0,0,0,
555 :     0,0,0,0},
556 : edgomez 851
557 : edgomez 1053 /* _ */
558 :     {0,0,0,0,
559 :     0,0,0,0,
560 :     0,0,0,0,
561 :     0,0,0,0,
562 :     0,0,0,0,
563 :     1,1,1,1},
564 : edgomez 851
565 : edgomez 1053 /* ` */
566 :     {0,1,0,0,
567 :     0,0,1,0,
568 :     0,0,0,0,
569 :     0,0,0,0,
570 :     0,0,0,0,
571 :     0,0,0,0}
572 : edgomez 851 };
573 :    
574 :    
575 :     #define FONT_ZOOM 4
576 :    
577 :     void draw_num(IMAGE * img, const int stride, const int height,
578 :     const char * font, const int x, const int y)
579 :     {
580 :     int i, j;
581 :    
582 :     for (j = 0; j < FONT_ZOOM * FONT_HEIGHT && y+j < height; j++)
583 :     for (i = 0; i < FONT_ZOOM * FONT_WIDTH && x+i < stride; i++)
584 :     if (font[(j/FONT_ZOOM)*FONT_WIDTH + (i/FONT_ZOOM)])
585 :     {
586 :     int offset = (y+j)*stride + (x+i);
587 :     int offset2 =((y+j)/2)*(stride/2) + ((x+i)/2);
588 :     img->y[offset] = 255;
589 :     img->u[offset2] = 127;
590 :     img->v[offset2] = 127;
591 :     }
592 :     }
593 :    
594 :    
595 :     #define FONT_BUF_SZ 1024
596 :    
597 :     void image_printf(IMAGE * img, int edged_width, int height,
598 :     int x, int y, char *fmt, ...)
599 :     {
600 :     va_list args;
601 :     char buf[FONT_BUF_SZ];
602 :     int i;
603 :    
604 :     va_start(args, fmt);
605 :     vsprintf(buf, fmt, args);
606 :    
607 :     for (i = 0; i < buf[i]; i++) {
608 :     const char * font;
609 :    
610 :     if (buf[i] >= '!' && buf[i] <= '@')
611 :     font = ascii33[buf[i]-'!'];
612 :     else if (buf[i] >= 'A' && buf[i] <= 'Z')
613 :     font = ascii65[buf[i]-'A'];
614 :     else if (buf[i] >= '[' && buf[i] <= '`')
615 :     font = ascii91[buf[i]-'['];
616 :     else if (buf[i] >= 'a' && buf[i] <= 'z')
617 :     font = ascii65[buf[i]-'a'];
618 :     else
619 :     continue;
620 :    
621 :     draw_num(img, edged_width, height, font, x + i*FONT_ZOOM*(FONT_WIDTH+1), y);
622 :     }
623 :     }

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4