3、glDrawPixels 的用法和举例

glDrawPixels:绘制一些像素。当前可以简单理解为“把内存中一些数据作为像素数据,进行绘制”。
  glDrawPixels 函数与 glReadPixels 函数相比,参数内容大致相同。它的第一、二、三、四个参数分别对应于 glReadPixels 函数的第三、四、五、六个参数,依次表示图象宽度、图象高度、像素数据内容、像素数据在内存中的格式。两个函数的最后一个参数也是对应的,glReadPixels 中表示像素读取后存放在内存中的位置,glDrawPixels 则表示用于绘制的像素数据在内存中的位置。
  注意到 glDrawPixels 函数比 glReadPixels 函数少了两个参数,这两个参数在glReadPixels 中分别是表示图象的起始位置。在 glDrawPixels 中,不必显式的指定绘制的位置,这是因为绘制的位置是由另一个函数 glRasterPos来指定的。glRasterPos函数的参数与 glVertex*类似,通过指定一个二维/三维/四维坐标,OpenGL 将自动计算出该坐标对应的屏幕位置,并把该位置作为绘制像素的起始位置。
  自己画一个dummy.bmp文件,程序如下

// glDrawPixels举例.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include "pch.h"
#include <iostream>
#include <gl/glut.h>
#define FileName "dummy.bmp"
static GLint ImageWidth;
static GLint ImageHeight;
static GLint PixelLength;
static GLubyte* PixelData;
#include <stdio.h>
#include <stdlib.h>
void display(void)
{// 清除屏幕并不必要// 每次绘制时,画面都覆盖整个屏幕// 因此无论是否清除屏幕,结果都一样// glClear(GL_COLOR_BUFFER_BIT);// 绘制像素glDrawPixels(ImageWidth, ImageHeight,GL_BGR_EXT, GL_UNSIGNED_BYTE, PixelData);// 完成绘制glutSwapBuffers();
}
int main(int argc, char* argv[])
{// 打开文件FILE* pFile;errno_t err;err= fopen_s(&pFile,"C:\\*********\\dummy.bmp", "rb");if (pFile == 0)exit(0);// 读取图象的大小信息fseek(pFile, 0x0012, SEEK_SET);fread(&ImageWidth, sizeof(ImageWidth), 1, pFile);fread(&ImageHeight, sizeof(ImageHeight), 1, pFile);// 计算像素数据长度PixelLength = ImageWidth * 3;while (PixelLength % 4 != 0)++PixelLength;PixelLength *= ImageHeight;// 读取像素数据PixelData = (GLubyte*)malloc(PixelLength);if (PixelData == 0)exit(0);fseek(pFile, 54, SEEK_SET);fread(PixelData, PixelLength, 1, pFile);// 关闭文件fclose(pFile);// 初始化 GLUT 并运行glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);glutInitWindowPosition(100, 100);glutInitWindowSize(ImageWidth, ImageHeight);glutCreateWindow(FileName);glutDisplayFunc(&display);glutMainLoop();// 释放内存// 实际上,glutMainLoop 函数永远不会返回,这里也永远不会到达// 这里写释放内存只是出于一种个人习惯// 不用担心内存无法释放。在程序结束时操作系统会自动回收所有内存free(PixelData);return 0;
}


 运行结果
  OpenGL 在绘制像素之前,可以对像素进行若干处理。最常用的可能就是对整个像素图象进行放大/缩小。使用 glPixelZoom来设置放大/缩小的系数,该函数有两个参数,分别是水平方向系数和垂直方向系数。例如设置 glPixelZoom(0.5f, 0.8f);则表示水平方向变为原来的 50%大小,而垂直方向变为原来的 80%大小。我们甚至可以使用负的系数,使得整个图象进行水平方向或垂直方向的翻转(默认像素从左绘制到右,但翻转后将从右绘制到左。默认像素从下绘制到上,但翻转后将从上绘制到下。因此,glRasterPos*函数设置的“开始位置”不一定就是矩形的左下角)。

OpenGL-入门-BMP像素图glDrawPixels相关推荐

  1. 最全面的openGL 入门学习

    自己在找openGL学习资料的时候,找到此篇openGL入门学习(虽然不是移动开发,但给我提供了非常好的思路),所以转一下让更多人知道,本文来自http://www.cppblog.com/doing ...

  2. OpenGL入门学习 (转)

    OpenGL入门学习 (转) 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜 ...

  3. OpenGL入门学习[三]

    OpenGL入门学习[三] http://xiaxveliang.blog.163.com/blog/static/2970803420126246501930/ OpenGL入门学习[十一] 我们在 ...

  4. 【待完善】OpenGL入门学习

    严正声明:本文转载自网络,但具体出处未知.如果有读者了解,请联系我更正. 为了阅读方便,我对文字格式进行了修改,并填补了缺少的图片. 我尊重每位作者的权益,如果本文存在侵权行为,请联系我删除并道歉. ...

  5. 【转载】OpenGL入门学习

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

  6. OpenGL入门教程(转)

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  7. opengl 入门学习

    转自 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#include <gr ...

  8. OpenGL入门学习[二] 绘制简单的几何图形

    OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...

  9. OpenGL 入门 17:立方体贴图

    立方体贴图(Cube Map) 立方体贴图是由"上下左右前后"6个2D纹理合并成的一张纹理.与2D纹理使用(u,v)坐标采样不同的是,立方体纹理使用一个方向向量进行采样. 1. 方 ...

最新文章

  1. Java高新技术第一篇:类加载器详解
  2. 零拷贝和java NIO
  3. 豆瓣评分9.4!这部大片你不应该错过,每一秒都是不敢看的残忍!
  4. Kafka笔记-搭建及单机生产者、消费者操作
  5. 主成份分析(PCA)——原理、实现步骤
  6. 再见,Python!你好,Go语言\n\n
  7. 信道编码-RS-CRC-交织(一)
  8. python数据平滑处理,numpy之数据平滑处理
  9. 中级微观经济学笔记整理
  10. 记一次笔试遇到leetcode原题却没a出来的经历
  11. 《塞尔达传说:旷野之息》中设计元素的分析
  12. SSSP整合分页CRUD
  13. Andriod PDA RFID感应盘点
  14. C# 对Excel表格中的数据进行排序
  15. 网络7层协议,4层,5层?理清容易混淆的几个概念
  16. eplan好看的电缆图表_eplan中怎样才能把整个项目的端子图表或者电缆图表生成到我指定的位置...
  17. win10系统下修改pdf文件默认阅读器
  18. 中考可以用计算机,中考计算机考试内容·中考信息技术要考哪些项目?
  19. iOS调用文件app(file.app)选择文件和下载
  20. POI版本对比jar包升级后代码报错修正

热门文章

  1. Firefox浏览器版本66的下载链接
  2. MySql查询当前版本
  3. VxWorks 引导程序(BIOS/BootLoader/Bootrom)
  4. 数学-快速心算:快速心算
  5. 手机出货量大跌34.9%,2019小米将何去何从
  6. Kali Linux中无法使用pip的解决方法
  7. Linux 安装qq农场小游戏
  8. 快手在线查询权重网站源码+接口
  9. dd/MM/yyyy:HH:mm:ss +0800时间格式的转换
  10. 「IT女神勋章」挑战赛#