设为首页 加入收藏

TOP

OpenGL超级宝典学习笔记——操作像素
2015-02-25 22:43:20 来源: 作者: 【 】 浏览:31
Tags:OpenGL 超级 宝典 学习 笔记 操作 像素

OpenGL支持放大,缩小,旋转图像。下面将举例介绍这些像素的操作。下面的例子是从tga文件中读取图片并显示,而且可以通过右键菜单来选择图像的显示模式和保存图片的快照到磁盘命名为screenshot.tga。完整的代码示例如下:


SetupRC函数用于加载图像数据,保存图像数据,图像的宽高和格式等信息。


在程序退出时,记得释放为图像数据分配的内存,在ShutdownRC中释放图像数据


在main函数中,创建菜单,为每个菜单项分配键值,然后绑定到右键上。


根据所选择的菜单进行相应的操作,默认情况下是通过glDrawPixels函数把图像放置在窗口的左下角显示。第一个菜单项Save Image是保存图像的快照。


常见的图像操作,放大和缩小图像。OpenGL提供了一个对图像进行缩放的函数:


void glPixelZoom(GLfloat xfactor, GLfloat yfactor);


xfactor,yfactor指定了在x,y方向上缩放的倍数。图像的缩放包括了放大,缩小和反转。例如:如果x方向上的缩放因子为2,那么图像在x方向上会放大2被。在本例中选择第三项菜单可以把图像填满窗口:


如果缩放因子为负值,效果就是沿缩放方向进行反转。此时不仅仅反转了图像中像素的排列顺序,而且也翻转图像根据光栅位置在屏幕上绘制的方向。例如,一般是图像的左下角放置在当前光栅位置,如果两个缩放因子都为负值则图像的右上角被放置在当前光栅位置处:


除了像素的缩放之外,OpenGL还支持对图像进行一些简单的数学操作。把像素转移到颜色缓冲区或者从颜色缓冲区转移出来。可以调用下面两个函数来实现:


void glPixelTransferi(GLenum pname, GLint param);


void glPixelTransferf(GLenum pname, GLfloat param);


pname的枚举值如下表:


缩放和偏转参数允许缩放和偏转单独的颜色通道。缩放因子将与颜色成分值相乘,偏转值则与颜色成分值相加。公式如下:


新值 = (旧值 * 缩放因子)+偏转值


默认情况下缩放因子是1.0,偏转值是0.0。如果想让图像只显示红色成分值,则可以设置绿色和蓝色的缩放因子为0.0.


glPixelTransferf(GL_GREEN_SCALE, 0.0f);


glPixelTransferf(GL_BLUE_SCALE, 0.0f);


例子中,分别显示红色,绿色,蓝色成分值的代码:


在绘制完成后把各个颜色通道的缩放因子复原。


glPixelTransferf(GL_RED_SCALE, 0.3f);
glPixelTransferf(GL_GREEN_SCALE, 0.59f);
glPixelTransferf(GL_BLUE_SCALE, 0.11f);


得到的效果是更好看的灰度图:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenGL超级宝典学习笔记——位图 下一篇OpenGL超级宝典学习笔记——纹理..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: