freetype应用范例

原创 2015年11月20日 13:27:37
//-------------------------------------------------------------------------------------
void LoadTextBitmap(RGN_HANDLE Handle, BITMAP_S *pstBitmap, int size, unsigned short* incode, int len)
{
	FT_Library		pFTLib               =NULL;
	FT_Face         pFTFace           = NULL;

	FT_Glyph		glyph;
	FT_UInt			glyph_index;
	FT_Error		error = 0;

	int i = 0;
	
	len /= 2;
	if (len < 1)
		return;
	
	error = FT_Init_FreeType(&pFTLib);
	if(error){
		return;
	}

	error = FT_New_Face(pFTLib, "./simsun.ttf", 0, &pFTFace);
	if(error){
		return;
	}

	if(0 !=FT_Set_Char_Size(pFTFace, 0, size<<6, 300, 300)){
		return;
	}

	FT_Bitmap *bitmap = malloc(sizeof(FT_Bitmap)*len);
	FT_BitmapGlyph bitmap_glyph;
	int totalSize = 0;
	int totalWidth = 0;
	for (i=0; i<len; i++){
		glyph_index =FT_Get_Char_Index(pFTFace, incode[i]);
		FT_Load_Glyph(pFTFace, glyph_index, FT_LOAD_DEFAULT);

		error =FT_Get_Glyph(pFTFace->glyph, &glyph);
		if (error){
			return;
		}

		FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 0);

		bitmap_glyph = (FT_BitmapGlyph)glyph;
		bitmap[i] = bitmap_glyph->bitmap;
		totalSize += bitmap[i].width * bitmap[i].rows;
		totalWidth += (bitmap[i].width);

		int w = bitmap[i].width;
		int h = bitmap[i].rows;
		int j,k;
		for (k=0; k<h; k++){
		   for (j=0; j<w; j++){
				if((bitmap[i].buffer[k * w  + j]) == 0 ){
					printf("0");
				}else{
					printf("1");
				}
			}
			printf("\n");
		}		
	}
	
	pstBitmap->pData = calloc(1, totalSize*2);
	if (NULL == pstBitmap->pData){
		return;
	}
	pstBitmap->enPixelFormat = PIXEL_FORMAT_RGB_1555;
	pstBitmap->u32Width = totalWidth;
	pstBitmap->u32Height = bitmap[0].rows;

	int j,k;

	unsigned short *pDst = pstBitmap->pData;
	char *pSrc;
	int h = bitmap[0].rows;
	int off_j = 0;
	for (k=0; k<h; k++){		
		off_j=0;
		for (i=0; i<len; i++){			
			int w = bitmap[i].width; 
			for (j=0; j<w; j++){
				if((bitmap[i].buffer[k * w	+ j]) == 0 ){
					printf("0");
					pDst[k*totalWidth+off_j+j] = 0;
				}else{
					pDst[k*totalWidth+off_j+j] = 0xEFFF;
					printf("1");
				}
			}
			off_j += w;
		}
		printf("\n");
	}		
	free(pstBitmap->pData);
	free(bitmap);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android图形库Skia(三)-结合Freetype显示文字

在图像是显示字体,Skia的api中就有,直接可以将文字显示出现。如下代码:       SkTypeface *font = SkTypeface::CreateFromFile("NotoSa...

文本处理以及freetype的使用

1. 字符编码 编码 解释 GBK(国标扩展码) 英文字符用一个字节进行表示,值小于等于 127。汉字用两个字节进行表示,对应的区位码由国家标准指定 UTF-8 变长编码,中文文...

Ubuntu上编译安装Freetype/Freetype-py

安装freetype-py wget http://freetype-py.googlecode.com/files/freetype-py-0.4.1.tar.gz tar xvzf freet...

linux上freetype2安装编译和使用

目前正在做linux上的opengl开发,是做视频图像处理的,需要叠加一下文字动画和特效。用opengl的做法是先生成文字贴图然后用opengl渲染在视频帧上就可以了,所以关键是要获得文字的图片,网上...

freetype安装

安装freetype最新库文件 步骤一:进入软件源码包所在目录/usr/local/src/中,解压软件包freetype-2.3.5.tar.gz到当前目录freetype-2.3.5下,并进入f...

Centos下安装c++编译环境

这个指令在网上找了很久, 终于会了,如果可以记得好评哈哈。 yum install gcc-c++

基于framebuffer显示图片(bmp && png)和汉字

章节 1 功能描述 2 图片显示,字体显示接口 3 使用实例 功能描述图片显示: 支持位置设置,支持BMP && PNG格式的图片,程序通过读取bmp&&PNG图片的路径,解析图片的点阵掩码mask,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)