[cvs] / xvidcore / src / image / font.c Repository:
ViewVC logotype

View of /xvidcore/src/image/font.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4.2.1 - (download) (annotate)
Mon Jun 9 01:20:09 2003 UTC (20 years, 9 months ago) by edgomez
Branch: dev-api-4
Changes since 1.4: +511 -446 lines
ISO C89 comment style
 /******************************************************************************
  *                                                                            *
  *  This file is part of XviD, a free MPEG-4 video encoder/decoder            *
  *                                                                            *
  *  XviD is free software; you can redistribute it and/or modify it           *
  *  under the terms of the GNU General Public License as published by         *
  *  the Free Software Foundation; either version 2 of the License, or         *
  *  (at your option) any later version.                                       *
  *                                                                            *
  *  XviD is distributed in the hope that it will be useful, but               *
  *  WITHOUT ANY WARRANTY; without even the implied warranty of                *
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
  *  GNU General Public License for more details.                              *
  *                                                                            *
  *  You should have received a copy of the GNU General Public License         *
  *  along with this program; if not, write to the Free Software               *
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  *
  *                                                                            *
  ******************************************************************************/

 /******************************************************************************
  *                                                                            *
  *  font.c                                                                    *
  *                                                                            *
  *  Copyright (C) 2001 - Peter Ross <suxen_drol@hotmail.com>                  *
  *                                                                            *
  *  For more information visit the XviD homepage: http://www.xvid.org         *
  *                                                                            *
  ******************************************************************************/

 /******************************************************************************
  *                                                                            *
  *  Revision history:                                                         *
  *                                                                            *
  *	 22.06.2002  inital version                                                *
  *                                                                            *
  ******************************************************************************/

#include <stdio.h>
#include <stdarg.h>

#include "image.h"
#include "font.h"

#define FONT_WIDTH	4
#define FONT_HEIGHT	6


static const char ascii33[33][FONT_WIDTH*FONT_HEIGHT] = { 

	/* ! */
	{0,0,1,0,	
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,0,0,
	 0,0,1,0},
	
	/* " */
	{0,1,0,1,
	 0,1,0,1,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0},
	
	/* # */
	{0,1,1,0,
	 1,1,1,1,
	 0,1,1,0,
	 0,1,1,0,
	 1,1,1,1,
	 0,1,1,0},

	/* $ */
	{0,1,1,0,
	 1,0,1,1,
	 1,1,1,0,
	 0,1,1,1,
	 1,1,0,1,
	 0,1,1,0},
	
	/* % */
	{1,1,0,1,
	 1,0,0,1,
	 0,0,1,0,
	 0,1,0,0,
	 1,0,0,1,
	 1,0,1,1},

	/* & */
	{0,1,1,0,
	 1,0,0,0,
	 0,1,0,1,
	 1,0,1,0,
	 1,0,1,0,
	 0,1,0,1},

	/* ' */
	{0,0,1,0,
	 0,0,1,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0},

	/* ( */
	{0,0,1,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,0,1,0},

	/* ) */
	{0,1,0,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,1,0,0},

	/* * */
	{0,0,0,0,
	 1,0,0,1,
	 0,1,1,0,
	 1,1,1,1,
	 0,1,1,0,
	 1,0,0,1},
	
	/* + */
	{0,0,0,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,1,1,1,
	 0,0,1,0,
	 0,0,1,0},
	
	/* , */
	{0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,1,1,0,
	 0,0,1,0},
	
	/* - */
	{0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 1,1,1,1,
	 0,0,0,0,
	 0,0,0,0},

	/* . */
	{0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,1,1,0,
	 0,1,1,0},

	/* / */
	{0,0,0,1,
	 0,0,0,1,
	 0,0,1,0,
	 0,1,0,0,
	 1,0,0,0,
	 1,0,0,0},

	/* 0 */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,1,1,
	 1,1,0,1,
	 1,0,0,1,
	 0,1,1,0},
	
	/* 1 */
	{0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0},
	
	/* 2 */
	{0,1,1,0,
	 1,0,0,1,
	 0,0,1,0,
	 0,1,0,0,
	 1,0,0,0,
	 1,1,1,1},
	
	/* 3 */
	{0,1,1,0,
	 1,0,0,1,
	 0,0,1,0,
	 0,0,0,1,
	 1,0,0,1,
	 0,1,1,0},

	/* 4 */
	{0,0,1,0,
	 0,1,1,0,
	 1,0,1,0,
	 1,1,1,1,
	 0,0,1,0,
	 0,0,1,0},

	/* 5 */
	{1,1,1,1,
	 1,0,0,0,
	 1,1,1,0,
	 0,0,0,1,
	 1,0,0,1,
	 0,1,1,0},

	/* 6 */
	{0,1,1,1,
	 1,0,0,0,
	 1,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 0,1,1,0},

	/* 7 */
	{1,1,1,0,
	 0,0,0,1,
	 0,0,0,1,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0},

	/* 8 */
	{0,1,1,0,
	 1,0,0,1,
	 0,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 0,1,1,0},

	/* 9 */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 0,1,1,1,
	 0,0,0,1,
	 1,1,1,0},

	/* : */
	{0,0,0,0,
	 0,0,0,0,
	 0,0,1,0,
	 0,0,0,0,
	 0,0,1,0,
	 0,0,0,0},

	/* ; */
	{0,0,0,0,
	 0,0,1,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,1,1,0,
	 0,0,1,0},

	/* < */
	{0,0,0,1,
	 0,0,1,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,0,1,0,
	 0,0,0,1},

	/* = */
	{0,0,0,0,
	 1,1,1,1,
	 0,0,0,0,
	 0,0,0,0,
	 1,1,1,1,
	 0,0,0,0},

	/* > */
	{0,1,0,0,
	 0,0,1,0,
	 0,0,0,1,
	 0,0,0,1,
	 0,0,1,0,
	 0,1,0,0},

	/* ? */
	{0,1,1,0,
	 1,0,0,1,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,0,0,
	 0,0,1,0},

	/* @ */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,1,1,
	 1,0,1,1,
	 1,0,0,0,
	 0,1,1,0},

};


static const char ascii65[26][FONT_WIDTH*FONT_HEIGHT] = { 
	/* A */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,1,1,1,
	 1,0,0,1,
	 1,0,0,1},
	
	/* B */
	{1,1,1,0,
	 1,0,0,1,
	 1,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,1,1,0},
	
	/* C */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,0,0,
	 1,0,0,0,
	 1,0,0,1,
	 0,1,1,0},
	
	/* D */
	{1,1,0,0,
	 1,0,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,1,0,
	 1,1,0,0},

	/* E */
	{1,1,1,1,
	 1,0,0,0,
	 1,1,1,0,
	 1,0,0,0,
	 1,0,0,0,
	 1,1,1,1},

	/* F */
	{1,1,1,1,
	 1,0,0,0,
	 1,1,1,0,
	 1,0,0,0,
	 1,0,0,0,
	 1,0,0,0},

	/* G */
	{0,1,1,1,
	 1,0,0,0,
	 1,0,1,1,
	 1,0,0,1,
	 1,0,0,1,
	 0,1,1,0},

	/* H */
	{1,0,0,1,
	 1,0,0,1,
	 1,1,1,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1},

	/* I */
	{0,1,1,1,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,1,1,1},

	/* J */
	{0,1,1,1,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 1,0,1,0,
	 0,1,0,0},

	/* K */
	{1,0,0,1,
	 1,0,0,1,
	 1,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1},

	/* L */
	{1,0,0,0,
	 1,0,0,0,
	 1,0,0,0,
	 1,0,0,0,
	 1,0,0,0,
	 1,1,1,1},

	/* M */
	{1,0,0,1,
	 1,1,1,1,
	 1,1,1,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1},

	/* N */
	{1,0,0,1,
	 1,1,0,1,
	 1,1,0,1,
	 1,0,1,1,
	 1,0,1,1,
	 1,0,0,1},

	/* 0 */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 0,1,1,0},

	/* P */
	{1,1,1,0,
	 1,0,0,1,
	 1,1,1,0,
	 1,0,0,0,
	 1,0,0,0,
	 1,0,0,0},

	/* Q */
	{0,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,1,0,
	 0,1,0,1},


	/* R */
	{1,1,1,0,
	 1,0,0,1,
	 1,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1},

	/* S */
	{0,1,1,0,
	 1,0,0,1,
	 0,1,0,0,
	 0,0,1,0,
	 1,0,0,1,
	 0,1,1,0},

	/* T */
	{0,1,1,1,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0},

	/* U */
	{1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,1,1,1},

	/* V */
	{1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 0,1,1,0,
	 0,1,1,0,
	 0,1,1,0},

	/* W */
	{1,0,0,1,
	 1,0,0,1,
	 1,0,0,1,
	 1,1,1,1,
	 1,1,1,1,
	 1,0,0,1},

	/* X */
	{1,0,0,1,
	 1,0,0,1,
	 0,1,1,0,
	 1,0,0,1,
	 1,0,0,1,
	 1,0,0,1},

	/* Y */
	{1,0,0,1,
	 1,0,0,1,
	 0,1,0,0,
	 0,0,1,0,
	 0,1,0,0,
	 1,0,0,0},

	/* Z */
	{1,1,1,1,
	 0,0,0,1,
	 0,0,1,0,
	 0,1,0,0,
	 1,0,0,0,
	 1,1,1,1},

};



static const char ascii91[6][FONT_WIDTH*FONT_HEIGHT] = { 
	/* [ */
	{0,1,1,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,1,0,0,
	 0,1,1,0},

	/* '\' */
	{1,0,0,0,
	 1,0,0,0,
	 0,1,0,0,
	 0,0,1,0,
	 0,0,0,1,
	 0,0,0,1},

	/* ] */
	{0,1,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,0,1,0,
	 0,1,1,0},

	/* ^ */
	{0,1,0,1,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0},

	/* _ */
	{0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 1,1,1,1},

	/* ` */
	{0,1,0,0,
	 0,0,1,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0,
	 0,0,0,0}
};


#define FONT_ZOOM	4

void draw_num(IMAGE * img, const int stride, const int height,
			  const char * font, const int x, const int y)
{
	int i, j;

	for (j = 0; j < FONT_ZOOM * FONT_HEIGHT && y+j < height; j++)
		for (i = 0; i < FONT_ZOOM * FONT_WIDTH && x+i < stride; i++)
			if (font[(j/FONT_ZOOM)*FONT_WIDTH + (i/FONT_ZOOM)])
			{
				int offset = (y+j)*stride + (x+i);
				int offset2 =((y+j)/2)*(stride/2) + ((x+i)/2);
				img->y[offset] = 255;
				img->u[offset2] = 127;
				img->v[offset2] = 127;
			}
}


#define FONT_BUF_SZ  1024

void image_printf(IMAGE * img, int edged_width, int height, 
				  int x, int y, char *fmt, ...)
{
	va_list args;
	char buf[FONT_BUF_SZ];
	int i;

	va_start(args, fmt);
	vsprintf(buf, fmt, args);

	for (i = 0; i < buf[i]; i++) {
		const char * font;

		if (buf[i] >= '!' && buf[i] <= '@')
			font = ascii33[buf[i]-'!'];
		else if (buf[i] >= 'A' && buf[i] <= 'Z')
			font = ascii65[buf[i]-'A'];
		else if (buf[i] >= '[' && buf[i] <= '`')
			font = ascii91[buf[i]-'['];
		else if (buf[i] >= 'a' && buf[i] <= 'z')
			font = ascii65[buf[i]-'a'];
		else
			continue;

		draw_num(img, edged_width, height, font, x + i*FONT_ZOOM*(FONT_WIDTH+1), y);
	}
}

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