OpenGL字体处理类-可直接复制到工程里
来源:互联网 发布:sql漏洞检测工具 编辑:程序博客网 时间:2024/05/23 15:52
电脑里发现的之前大学期间做OpenGL留下的字体处理类,贴出来,给需要的人
头文件
#ifndef__FONT_H__#define__FONT_H__#pragma warning(disable: 4267) /**< 禁止编译器出现类型转换的警告 */#pragma warning(disable: 4244)/** 定义字体类 */class GLFont{public: /** 构造函数和析构函数 */GLFont();~GLFont(); /** 初始化字体 */bool InitFont(); /** 在(x,y)处输出string内容 */void PrintText(char *string, float x, float y); protected:HFONT m_hFont; /**< 字体句柄 */};#endif//
cpp文件
#include<windows.h> /**< 包含windows头文件 */#include<gl/gl.h> /**< 包含gl头文件 */#include "Font.h"GLFont::GLFont(){}/** 析构函数 */GLFont::~GLFont(){if(m_hFont)DeleteObject(m_hFont); /**< 删除字体句柄 */}/** 初始化字体 */bool GLFont::InitFont(){ /** 创建字体 */ m_hFont = CreateFont(-48,/**< 字体高度 */0,/**< 字体宽度 */0,/**< 字体的旋转角度 */0,/**< 字体底线的旋转角度 */FW_BLACK,/**< 字体的重量 */FALSE,/**< 是否使用斜体 */FALSE,/**< 是否使用下划线 */FALSE,/**< 是否使用删除线 */GB2312_CHARSET,/**< 设置字符集 */OUT_TT_PRECIS,/**< 输出精度 */CLIP_DEFAULT_PRECIS,/**< 裁剪精度 */ANTIALIASED_QUALITY,/**< 输出质量 */FF_DONTCARE|DEFAULT_PITCH,/**< Family And Pitch */"隶书");/**< 字体名称 */ if(!m_hFont)return false; /**< 创建字体失败则返回 */ return true;}/** 在指定位置输出字符串 */void GLFont::PrintText(char *string, float x, float y){HBITMAP hBitmap,hOldBmp; /**< 定义两个位图句柄 */BITMAP bm; /**< 位图结构变量 */SIZE size; /**< 位图尺寸 *//** 获得场景中的状态 */GLboolean lp,tp;glGetBooleanv(GL_LIGHTING,&lp);glGetBooleanv(GL_TEXTURE_2D,&tp);HDC hDC = ::CreateCompatibleDC(0); /**< 暂存设备场景 *//** 保存和设置一些属性 */glLoadIdentity();glPushMatrix();glTranslatef(0,0,-10.0f);glDisable(GL_LIGHTING); /**< 关闭光照 */glDisable(GL_TEXTURE_2D); /**< 关闭纹理 */glDisable(GL_DEPTH_TEST); /**< 关闭深度测试 */ SelectObject(hDC, m_hFont); /**< 选择字体 *//** 获取字符位图大小 */::GetTextExtentPoint32(hDC, string, strlen(string), &size);/** 创建与hDC相关单色位图 */hBitmap = CreateBitmap(size.cx, size.cy,1, 1, NULL); /** 选择位图 */ hOldBmp = (HBITMAP)SelectObject(hDC,hBitmap); SetBkColor(hDC, RGB(0, 0, 0)); /**< 背景色为黑色 */SetTextColor(hDC, RGB(255, 255, 255)); /**< 字体颜色白色 */SetBkMode(hDC, OPAQUE); /**< 用当前的背景颜色填充背景 */TextOut(hDC, 0, 0, string, strlen(string)); /**< 输出文字到暂存hDC *//** 获得相关位图数据结构 */GetObject(hBitmap, sizeof(bm), &bm);size.cx = (bm.bmWidth + 31) & (~31); /**< 边缘对齐 */size.cy = bm.bmHeight;int bufsize = size.cx * size.cy/8; /**< 图形数据长度 */ /** 定义单色位图结构 */ struct {BITMAPINFOHEADER bih;RGBQUAD col[2];}bic; /** 获取单色位图结构信息 */BITMAPINFO *binf = (BITMAPINFO *)&bic;binf->bmiHeader.biSize = sizeof(binf->bmiHeader); /**< 修改结构信息 */binf->bmiHeader.biWidth = bm.bmWidth;binf->bmiHeader.biHeight = bm.bmHeight;binf->bmiHeader.biPlanes = 1;binf->bmiHeader.biBitCount = 1; /**< 单色 */binf->bmiHeader.biCompression = BI_RGB; /**< 颜色方式 */binf->bmiHeader.biSizeImage = bufsize;binf->bmiHeader.biXPelsPerMeter = 1;binf->bmiHeader.biYPelsPerMeter = 1;binf->bmiHeader.biClrUsed = 0;binf->bmiHeader.biClrImportant = 0;/** 定义图形数据块 */ UCHAR* pBmpBits = new UCHAR[bufsize];memset(pBmpBits, 0, sizeof(UCHAR)*bufsize);/** 将设备无关数据保存在pBmpBits指向的数据块中 */::GetDIBits(hDC, hBitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_RGB_COLORS); /** 显示字符串 */glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /**< 指定像素存储模式 */glRasterPos2f(x,y); /**< 定位 *//** 位图显示 */glBitmap(size.cx, size.cy, 0.0, 0.0, 0.0, 0.0, pBmpBits); delete pBmpBits; /**< 删除指针 */SelectObject(hDC, hOldBmp); /**< 恢复原来位图信息 */DeleteObject(hBitmap);::DeleteDC(hDC);/** 恢复一些状态 */if(lp)glEnable(GL_LIGHTING); /**< 开启光照 */ if(tp)glEnable(GL_TEXTURE_2D); /**< 开启纹理 */glEnable(GL_DEPTH_TEST); /**< 开启深度测试 */glPopMatrix();}PS:时间久了记不清是不是原创的了
17 0
- OpenGL字体处理类-可直接复制到工程里
- OpenGL中三维坐标的处理类 可以直接复制到工程里
- 可直接复制到本机结构中的类型和非直接复制到本机结构中的类型
- JS--通过按钮直接把input或者textarea里的值复制到粘贴板里
- android圆形图片,圆形头像实现方法(可直接运用到工程中)
- Top SQL Server Memory Pressure Counters 复制到Performance Monitor里可以直接开始监控
- 3.dialog实现,直接可复制调用
- 4.toast实现,直接复制可调用
- OpenGL字体类(Windows)
- dds的cube加载到opengl里后的处理方式。
- 【Get深一度】Hilbert变换(平时写的文档,没法直接复制粘贴到CSDN里,只好截图了)
- 【Get深一度】卷积性质(平时写的文档,没法直接复制粘贴到CSDN里,只好截图了)
- ios 如何添加字体到工程中
- 二分法查找一个数(可直接复制使用)
- 异步内存、直接复制及流处理复制对比
- 快速复制资源到另一个工程
- maven lib 复制到工程中
- Android:可复制的TextView、EditText,复制文字到剪贴板
- 百度搜索引擎高级搜索指令
- Strategic game
- 多媒体压缩格式
- C语言编程笔记-01
- 戏说WSGI(Python Web服务网关接口)
- OpenGL字体处理类-可直接复制到工程里
- 第7周项目3(3)
- 笔试题
- CSS标签宝典大全
- kettle spoon pentaho
- 买牛奶(南阳oj892)
- dd大牛的《背包九讲》
- [caffe]深度学习之图像分类模型AlexNet解读
- 成功实现Django Admin图片上传与缩略图处理