资源简介
使用OpenGL+FreeType技术渲染了点阵格式的中文宋体(字体大小小于16),效果极好,可与Windows自身渲染的效果一比
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#pragma comment(lib “lib/glut32.lib“)
//#pragma comment(lib “lib/freetype2110.lib“)
using namespace std;
#define MAX_NO_TEXTURES 1
#define CUBE_TEXTURE 0
GLuint texture_id[MAX_NO_TEXTURES];
struct xCharTexture
{
GLuint m_texID;
wchar_t m_chaID;
int m_Width;
int m_Height;
int m_adv_x;
int m_adv_y;
int m_delta_x;
int m_delta_y;
public:
xCharTexture()
{
m_texID = 0;
m_chaID = 0;
m_Width = 0;
m_Height = 0;
}
}g_TexID[65536];
class xFreeTypeLib
{
FT_Library m_FT2Lib;
FT_Face m_FT_Face;
public:
int m_w;
int m_h;
void load(const char* font_file int _w int _h);
GLuint loadChar(wchar_t ch);
};
void xFreeTypeLib::load(const char* font_file int _w int _h)
{
FT_Library library;
if (FT_Init_FreeType( &library) )
exit(0);
m_FT2Lib = library;
//加载一个字体取默认的Face一般为Regualer
if (FT_New_Face( library font_file 0 &m_FT_Face ))
exit(0);
//选择字符表
FT_Select_Charmap(m_FT_Face FT_ENCODING_UNICODE);
m_w = _w ; m_h = _h;
m_FT_Face->num_fixed_sizes;
//大小要乘64.这是规定。照做就可以了。
//FT_Set_Char_Size( m_FT_Face 0 m_w << 6 96 96);
//用来存放指定字符宽度和高度的特定数据
FT_Set_Pixel_Sizes(m_FT_Facem_w m_h);
}
GLuint xFreeTypeLib::loadChar(wchar_t ch)
{
if(g_TexID[ch].m_texID)
return g_TexID[ch].m_texID;
/* 装载字形图像到字形槽(将会抹掉先前的字形图像) */
if(FT_Load_Char(m_FT_Face ch
FT_LOAD_DEFAULT |
FT_LOAD_MONOCHROME |
FT_LOAD_TARGET_MONO) )
{
return 0;
}
/*if(FT_Load_Glyph( m_FT_Face FT_Get_Char_Index( m_FT_Face ch ) FT_LOAD_FORCE_AUTOHINT ))
throw std::runtime_error(“FT_Load_Glyph failed“);*/
xCharTexture& charTex = g_TexID[ch];
//得到字模
FT_Glyph glyph;
//把字形图像从字形槽复制到新的FT_Glyph对象glyph中。这个函数返回一个错误码并且设置glyph。
if(FT_Get_Glyph( m_FT_Face->glyph &glyph ))
return 0;
//转化成位图
FT_Render_Glyph( m_FT_Face->glyph FT_RENDER_MODE_MONO );//FT_RENDER_MODE_NORMAL );
FT_Glyph_To_Bitmap( &glyph FT_RENDER_MODE_MONO 0 1 );
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
//取道位图数据
FT_Bitmap &bitmap=bitmap_glyph->bitmap;
//把位图数据拷贝自己定义的数据区里.这样旧可以画到需要的东西上面了。
int width = bitmap.width;
int height = bitmap.rows;
m_FT_Face->size->metrics.y_ppem; //伸缩距离到设备空间
m_FT_Face->glyph->metrics.horiAdvance; //水平文本排列
charTex.m_Width = width;
charTex.m_Height = height;
charTex.m_adv_x = m_FT_Face->glyph->advance.x / 64.0f; //步进宽度
charTex.m_adv_y = m_FT_Face->size->metrics.y_ppem; //m_FT_Face->glyph->metrics.horiBearingY / 64.0f;
charTex.m_delta_x = (float)bitmap_glyph->left; //left:字形原点(00)到字形位图最左边象素的水平距离.它以整数象素的形式表示。
charTex.m_delta_y = (float)bitmap_glyph->top - height;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
....... 3735 2015-04-01 15:44 宋体渲染\FontRendering\FontRendering.vcxproj
....... 942 2015-01-30 14:12 宋体渲染\FontRendering\FontRendering.vcxproj.filters
....... 143 2015-01-30 14:12 宋体渲染\FontRendering\FontRendering.vcxproj.user
....... 11168 2015-04-01 15:37 宋体渲染\FontRendering\main.cpp
....... 906 2015-01-30 14:12 宋体渲染\FontRendering.sln
....... 22016 2015-04-01 15:45 宋体渲染\FontRendering.suo
....... 154624 2015-01-30 14:12 宋体渲染\glut.dll
....... 154624 2015-01-30 14:12 宋体渲染\glut32.dll
....... 18094 2015-01-30 14:12 宋体渲染\include\freetype\config\ftconfig.h
....... 25587 2015-01-30 14:12 宋体渲染\include\freetype\config\ftheader.h
....... 1399 2015-01-30 14:12 宋体渲染\include\freetype\config\ftmodule.h
....... 56425 2015-01-30 14:12 宋体渲染\include\freetype\config\ftoption.h
....... 7313 2015-01-30 14:12 宋体渲染\include\freetype\config\ftstdlib.h
....... 254137 2015-01-30 14:12 宋体渲染\include\freetype\freetype.h
....... 2383 2015-01-30 14:12 宋体渲染\include\freetype\ft2build.h
....... 10646 2015-01-30 14:12 宋体渲染\include\freetype\ftadvanc.h
....... 14651 2015-01-30 14:12 宋体渲染\include\freetype\ftautoh.h
....... 5244 2015-01-30 14:12 宋体渲染\include\freetype\ftbbox.h
....... 6802 2015-01-30 14:12 宋体渲染\include\freetype\ftbdf.h
....... 14388 2015-01-30 14:12 宋体渲染\include\freetype\ftbitmap.h
....... 4308 2015-01-30 14:12 宋体渲染\include\freetype\ftbzip2.h
....... 57527 2015-01-30 14:12 宋体渲染\include\freetype\ftcache.h
....... 10121 2015-01-30 14:12 宋体渲染\include\freetype\ftcffdrv.h
....... 8514 2015-01-30 14:12 宋体渲染\include\freetype\ftchapters.h
....... 5581 2015-01-30 14:12 宋体渲染\include\freetype\ftcid.h
....... 12217 2015-01-30 14:12 宋体渲染\include\freetype\fterrdef.h
....... 9292 2015-01-30 14:12 宋体渲染\include\freetype\fterrors.h
....... 4505 2015-01-30 14:12 宋体渲染\include\freetype\ftgasp.h
....... 38694 2015-01-30 14:12 宋体渲染\include\freetype\ftglyph.h
....... 13408 2015-01-30 14:12 宋体渲染\include\freetype\ftgxval.h
............此处省略85个文件信息
- 上一篇:vc界面库集总
- 下一篇:Mindmanager思维导图中文模版107个
相关资源
- Mindmanager思维导图中文模版107个
-
SAP Businessob
ject 入门教材(中文) - S7-300 模块数据及接线图 2013版 中文版
- leaflet中文版
- 数字通信 课件教材:John G. Proakis写的
- FastReport Professtional 5.6.2 Full Source for
- 《中文版AutoCAD 2018基础教程》邓堃 薛
- SX1276、1277、1278_数据手册_中文&英文
- opengl库文件132171
- Recovery Toolbox For Outlook 中文注册版(正
- s7 cfc 中文编程手册
- 软件工程中文版.pdf
- VL53L1的API中文用户手册
- server-u 9.0 试用版,已过期,最新如上
- anylogic行人库中文说明文档
- dicom协议中文文档
- ITILV3 Foundation培训内部资料,中文版
- 金融随机分析 2中文版
- opencascade中文帮助文档131651
- 斑马打印机ZPL指令中文手册
- USB3.0 协议 规范 中文
- 医学图像重建入门_曾更生著(中文版
- FileZilla_Server-0_9_14a唯一中文不乱码版
- ThelittleSASbook中文版全文.docx
- TI-PMLK开关电源入门开发板中文资料
- Conefor_Inputs_10英文和Conefor Sensinode 2.
- zw_STM32F107参考手册中文版.zip
- DrUnarchiver压缩软件中文版for MAC
- Qt中文帮助手册简易版
- Qlik-Sense-教程-基础入门-中文
评论
共有 条评论