0

采用位图掩码的方式在OpenGL中显示中文

作者:楼竞  发表于:2005年11月20日 23:49  分类:Program   2,586 次阅读 

本文介绍如何采用位图掩码的方式显示OpenGL位图文本,可以显示ASCII和中文。

前面我曾尝试使用位图文本的方式显示中文(采用位图文本的方式在OpenGL中显示中文),虽然设置了Bitmap为透视,但实际效果并不透视,原因在于读取像素数据数据时,被全部读入,系统根本不会考虑透视。

如果需要采用位图的方式显示中文,而且需要透视,可采用位图掩码的方式,位图掩码的基本思想如下:
(1)对每一个像素点设置掩码,掩码为1个Bit,取值1或者0;
(2)当设置了光栅颜色后,如果当前位为1,则以当前光栅颜色显示;
(3)如果当前为0,则不显示;
(4)因此只需要将透视部分的位图掩码设置为0,需要显示的文本部分的位图掩码设置为1即可。

小提醒:虽然每一个像素的位图掩码只占1个Bit,但最后的掩码数据是存入一个GLubyte型数组,因此这里要做个转换,把8个字节的数据压缩到1个字节中去。

本程序的思路:
(1)新建一个Bitmap,利用Canvas写入文本,将Bitmap中的背景色和字体色设置为2个不同的颜色;
(2)读取Bitmap的像素RGB数据,存入一个GLubyte型数组P1,注意每个像素点占3个字节;
(3)对数组P1中的所有像素进行判断,如果是字体色,则是要显示的像素,用255表示,如果是背景色,则是不要显示的,用0表示;结果存入GLubyte型数组P2,注意这时每个像素占1个字节;
(4)将P2中每个像素的数据用1个Bit表示,即255用1表示,0用0表示,注意这里是1个Byte变成1个Bit,换句话是说是8个Byte变成1个Byte,转换过程如下,用16进制表示:
假设8个字节的数据为
0xFF 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 (这里0x表示16进制)
则转换后为(1010 0100),即A4(16进制)
本程序采用位运算处理,最后将转换好的数据存入GLubyte型数组P3;
(5)利用glColor设置当前光栅颜色,glBitmap显示位图掩码P3。

开发环境:
Windows 2003 Server Standard Edition SP1 , C++ Builder 6 Update 4
源代码:点击下载

运行结果如图:

本文固定链接: http://www.loujing.com/blog/opengl-chinese/ | 楼竞网站

给我留言

快捷键:Ctrl+Enter