freetype应用范例

//-------------------------------------------------------------------------------------
void LoadTextBitmap(RGN_HANDLE Handle, BITMAP_S *pstBitmap, int size, unsigned short* incode, int len)
{
	HI_S32 s32Ret = HI_SUCCESS;
	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);
		printf ("####glyph.format:%x\n", glyph->format); 	//0x62697473 bits //0x6F75746C outl

		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);
}

时间: 2024-10-28 21:44:41

freetype应用范例的相关文章

LOG.ZS.0001.基于Freetype的游戏字体渲染优化思路

Total Utf8-ucs2 Html_parse Layout Render_string Init_texture Ft_load_glyph 原始 2293 1 26 708 1556 2 1403 上表用于记录优化各步骤的消耗时间. 生成的文本纹理,文本是加州宾馆的全歌词. 原始版本整个纹理的生成耗时2300毫秒左右,可以看到实际是慢得发指. 究其原因,是由于实现iron引擎的时候未进行任何性能方面的考虑. 上述时间表的构成: total : 总消耗时间 utf8-ucs2: 将utf

ubuntu 中php不支持gd库的freetype,导致页面验证码无法加载

1.修改源 cp /etc/apt/sources.list /etc/apt/sources.list.bak vim /etc/apt/sources.list 先删除里面的东西,再将下列写入: deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ precise-security main restricted uni

使用freetype来显示中文汉字和英文字符

这里我们用到了freetype.进入官网http://savannah.nongnu.org/download/freetype/ 中下载最新的版本2.7的源代码和文件.freetype-2.7.tar.gz freetype-doc-2.7.tar.gz 首先我们在使用官方提供的程序在pc上运行一下. 在freetype-doc-2.7.tar.gz文件中的docus目录下的tutorial有一个example.c的源文件. example.c: /* example1.c */ /* */

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

[转]:Delphi XE中泛型数组的使用范例

Delphi XE中泛型数组的使用范例,下面的范例简单的使用了泛型字符串数组,如用 TArray 代替 array of Word, 还可以使用 TArray 类提供的算法(就是少了点). uses Generics.Collections, Generics.Defaults; {测试 TArray 的 Sort 方法} procedure TForm1.Button1Click(Sender: TObject); var arr: TArray<string>; //同 array of

ls命令的20个实用范例

contents ls -l -h -lhS -l --block-size=M -a -d */ -g -G -n --color=never -i -p -r -R -t ls ~ ls --version ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上参数后,我们可以用ls做更多的事情.这里是一些在日常操作中使用到的ls用法的示例. 1. 不带参数运行ls 不带参数运行ls会只列出文件或者目录.看不到其他信息输出(译注:有时候你发现无参数的ls命令和这里描述的

嵌入式逻辑分析仪SignalTap II 设计范例

Crazy Bingo :嵌入式逻辑分析仪SignalTap II 设计范例 例程下载地址  http://www.cnblogs.com/crazybingo/archive/2011/07/26/2117262.html

Atitit 图像处理 halcon类库的使用 &#160;范例边缘检测 attilax总结

Atitit 图像处理 halcon类库的使用  范例边缘检测 attilax总结 1.1. 安装halcon11 ..体积大概1g压缩模式1 1.2. Halcon的科技树1 1.3. 启动 "D:\Program Files\MVTec\HALCON-11.0\bin\x86sse2-win32\hdevelop.exe"2 1.4. 编写hdev脚本 用的halcon自己的脚本语言2 1.5. 查找边缘算法3 1.6. 查函数列表与资料3 1.7. 对多语言的支持,以及接口,以及

linux freetype 安装

freetype下载: http://download.savannah.gnu.org/releases/freetype/ 命令行如下所示. [[email protected] root]# cd /usr/local/src///进入软件源码包所在目录 [[email protected] src]# tar zxvf freetype-2.3.5.tar.gz//解包解压到freetype-2.3.5目录 [[email protected] src]# cd freetype-2.3