#include <stdio.h>
#include <stdlib.h>
#include<glut.h>

int width;
int height;
static GLint     PixelLength;
const GLint new_width = 380;
const GLint new_height = 380;
//设置图像指针
GLubyte* pixels;

GLuint load_texture()
{
    //OpenGL纹理用整型数表示
    GLuint texture_ID;

FILE* pFile = fopen("Bliss.bmp", "rb");
if( pFile == 0 );
//exit(0);

// 读取图象的大小信息
fseek(pFile, 0x0012, SEEK_SET);
fread(&width, sizeof(width), 1, pFile);
fread(&height, sizeof(height), 1, pFile);

// 计算像素数据长度
PixelLength = width * 3;
while( PixelLength % 4 != 0 )
++PixelLength;
PixelLength *= width;

pixels = new GLubyte[PixelLength];
if( pixels == 0 );

fseek(pFile, 54, SEEK_SET);
fread(pixels, PixelLength, 1, pFile);

// 关闭文件
fclose(pFile);

GLint new_line_bytes = new_width * 3;
while( new_line_bytes % 4 != 0 )
++new_line_bytes;
GLint new_total_bytes = new_line_bytes * new_height;

// 分配内存
GLubyte* new_pixels = (GLubyte*)malloc(new_total_bytes);

gluScaleImage(GL_RGB,
width, height, GL_UNSIGNED_BYTE, pixels,
new_width, new_height, GL_UNSIGNED_BYTE, new_pixels);
free(pixels);
pixels=new_pixels;
width=new_height;
height=new_width;
    //将texture_ID设置为2D纹理信息
    glGenTextures(1, &texture_ID);
    glBindTexture(GL_TEXTURE_2D, texture_ID);
    //纹理放大缩小使用线性插值
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    //将图像内存用作纹理信息
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels);
free(new_pixels);
    
    return texture_ID;
}

void display()
{
    // 清除屏幕
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    //获取纹理对象
    GLuint image = load_texture();

//重新设置OpenGL窗口:原点位置为左上角,x轴从左到右,y轴从上到下,坐标值与像素坐标值相同
    glViewport(0, 0, (GLsizei)width, (GLsizei)height);//左下角x坐标, 左下角y坐标, wigth, height
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, width, height, 0);//左下角x坐标,右上角x坐标,左下角y坐标,右上角y坐标

//显示纹理
    glEnable(GL_TEXTURE_2D);               //允许使用纹理
    glBindTexture(GL_TEXTURE_2D, image);                   //选择纹理对象

//原始完全填充四边形
    glBegin(GL_POLYGON);   //设置为多边形纹理贴图方式并开始贴图
    glTexCoord2f(0.0f, 0.0f); glVertex2f(width,height);    //纹理左上角对应窗口左上角
    glTexCoord2f(0.0f, 1.0f); glVertex2f(width, 0);        //纹理左下角对应窗口左下角
    glTexCoord2f(1.0f, 1.0f); glVertex2f(0, 0);            //纹理右下角对应窗口右下角
    glTexCoord2f(1.0f, 0.0f); glVertex2f(0, height);       //纹理右上角对应窗口右上角
    glEnd();    //结束贴图*/
    glDisable(GL_TEXTURE_2D);    //禁止使用纹理
                                //双缓存交换缓存以显示图像
    glutSwapBuffers();
}

void main(int argc, char** argv)
{
    //初始化GL
    glutInit(&argc, argv);
    //设置显示参数(双缓存,RGB格式)
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    //设置窗口尺寸:width*height
    glutInitWindowSize(1280, 720);
    //设置窗口位置:在屏幕左上角像素值(100,100)处
    glutInitWindowPosition(100, 100);
    //设置窗口名称
    glutCreateWindow("OpenGL");
    //显示函数,display事件需要自行编写
    glutDisplayFunc(display);

//重复循环GLUT事件
    glutMainLoop();
}

openg显示Bmp图片相关推荐

  1. C语言用句柄显示bmp图片,VC编程之VC MFC界面上显示BMP图片

    本文主要向大家介绍了VC编程之VC MFC界面上显示BMP图片,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助. 1.通过点击界面浏览按钮选择BMP图像文件. 点击浏览按钮打开文件对话框选择 ...

  2. UEFI显示BMP图片

    两种方式 :一种为按像素点画图:另一种为将图片转换到GOP blt缓冲区中,允许用户调用blt将其显示出来. 画像素点方式极慢,可以看到一行一行的绘画过程:而使用缓冲区则会立刻显示出一张图片. 先了解 ...

  3. 在6818开发板上显示bmp图片的基本步骤

    我总结为以下四步: 1)打开液晶屏文件.打开bmp图片文件.完成液晶屏内存映射 2)读取bmp图片文件到临时数组temp,等待处理数组里面的数据. 3)处理数据.映射到液晶屏上,此处是bmp图片算法: ...

  4. Linux应用开发-LCD显示BMP图片

    1. 前言 BMP是一种与硬件设备无关的图像文件格式,是Windows环境中交换与图有关的数据的一种标准,在Windows环境中运行的图形图像软件都支持BMP图像格式.BMP格式的图片存放的就是原始的 ...

  5. VC MFC界面上显示BMP图片

    1.通过点击界面浏览按钮选择BMP图像文件. 点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录.关键代码如下: void ShowBMPDlg::OnButtonSelectiam ...

  6. 纯c++读取与显示BMP图片

    2019/10/7 给某些网络巨婴的说明 第一,不会配置vs环境的请绕道 第二,不懂字符集区别的请走开 第三,不会定义类的成员变量的请去学习 第四,不会处理编译器错误信息的请去百度 第五,什么都不会只 ...

  7. stm32显示bmp图片

    目录 1.介绍 2.代码 2.1 定义 2.2 图片显示 2.3 格式转换 3.实现效果 4.源码地址 1.介绍 使用stm32单片机将bmp格式的图片显示在屏幕上,如果图片尺寸大于屏幕就将其缩放,图 ...

  8. mysql显示bmp图片_BMP格式图像的显示

    使用多文档编程 也可以使用单文档编程 建立一个DIB图像的显示类 ImageDib 成员变量: 4个指针: LPBYTE m_lpDib;      //指向DIB的指针 LPBITMAPINFOHE ...

  9. 【数字图像处理】一.MFC详解显示BMP格式图片

    本文主要是讲述<数字图像处理>系列栏目中的第一篇文章.主要详细介绍了BMP图片格式,同时使用C++和MFC显示BMP格式,主要结合自己的<数字图像处理>课程和以前的项目叙述讲解 ...

  10. 【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片

    一.BMP图像介绍与显示 我们常用的图片格式有很多,一般最常用的有三种:JPEG(或 JPG).PNG.BMP和GIF.其中 JPEG(或JPG).PNG以及 BMP 都是静态图片,而 GIF 则可以 ...

最新文章

  1. GitLab安装说明
  2. 程序员看了都会笑的20个瞬间...
  3. 一篇适合新手的深度学习综述
  4. python连接ssh执行模块_python ssh之paramiko模块使用
  5. C++中的变量作用域介绍
  6. 字节/阿里/ 百度2021年Java岗发布+最新内部面试题
  7. 第8章例题 6-4 输入年份和天数,输出对应的年、月、日
  8. css_01_承接部分html+css快速入门
  9. 刚入职场的菜鸟,这些大数据知识点,你必须掌握了!
  10. 用户表如何区分普通用户和管理员_Gate.io 比特百科:什么是ETH 2.0及普通用户如何参与ETH 2.0质押挖矿...
  11. Vue模板语法---vue工作笔记0003
  12. Linux下的网络配置与连接
  13. 我去,还有这种网站!
  14. 实时数据处理简单分析
  15. MATLAB一元微积分实验
  16. c中字符串分割函数strtok
  17. matlab中的Repeating Sequence的用法
  18. 有没有一两万的创业项目
  19. c语言中取小数函数,C / C++ 保留小数函数(setprecision(n)的一些用法总结)
  20. 小小Mac:Web移动端适配方案

热门文章

  1. 计算机考证广东省ps
  2. vs格式化代码快捷键_VisualStudio高效率快捷键设置建议
  3. java回滚失败_java事务回滚失败问题分析
  4. 接上篇 按键精灵读写远程数据库,达到读写配置以及验证的效果(升级版)
  5. mingw不能安装_C语言/C++初学——Visual Studio环境的安装配置与使用
  6. 利用numpy自带的polyfit和polyval函数进行回归分析
  7. python 视频转图片
  8. QTcpSocket的读写操作
  9. 【PICkit3】PICkit3 Programmer烧写教程
  10. C语言在链表里存储线段,C语言链表详解课件.ppt