OpenGL学习笔记(14)像素操作
2010-10-28 15:18 Clingingboy 阅读(4760) 评论(1) 编辑 收藏 举报参考http://www.cnblogs.com/yutianfcl/articles/842414.html
图像与位图不同的是,图像的每个存储可以存储RGBA颜色
绘制像素
绘制一个矩形像素数据
void glDrawPixels(GLsizei width, GLsizei height, GLenum format,
GLenum type, const GLvoid *pixels);
如下示例
/* Create checkerboard image */ #define checkImageWidth 64 #define checkImageHeight 64 GLubyte checkImage[checkImageHeight][checkImageWidth][3]; static GLdouble zoomFactor = 1.0; static GLint height; void makeCheckImage(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; } } } void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); makeCheckImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); glRasterPos2i(0, 0); glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB, GL_UNSIGNED_BYTE, checkImage); glFlush(); }
首先makeCheckImage函数创建了一个64x64的一个RGB颜色数组,非黑即白
format与type参数要记得与数组相对应,否则可能会绘制出失帧的图片,效果如下
缩放图片
使用glPixelZoom函数可以对图片进行缩放,比如放大3倍glPixelZoom (3, 3);效果如下
复制图片
通过glCopyPixels函数进行复制图片,如下代码
glRasterPos2i(0, 0); glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB, GL_UNSIGNED_BYTE, checkImage); glRasterPos2i (100, 100); glCopyPixels (0, 0, checkImageWidth, checkImageHeight, GL_COLOR);
将新图像重新定位到100,100然后复制0,0坐标指定高度宽度的矩形
效果如下
其行为类似于先glReadPixels然后glDrawPixels
读取图像数据
可以使用glReadPixels函数读取指定位置的图像数据,如下代码
glRasterPos2i(100, 100); glReadPixels (0, 0, 32, 32, GL_RGB, GL_UNSIGNED_BYTE,checkImage1); glDrawPixels(32, 32, GL_RGB, GL_UNSIGNED_BYTE, checkImage1);
效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现