opengl打开本地bmp图片绘制
注意bmp图片的格式问题,32位ARGB 或者24位RGB。你所采用的素材一定要注意是多少位的就用多少位的。否则会显示错误的图片或者其他什么的错误。
代码如下
32位版本
#include <GL/glut.h> 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); // 绘制像素
// glBitmap(ImageWidth,ImageHeight,0,0,0.0,0.0,PixelData);
glDrawPixels(ImageWidth, ImageHeight,
GL_ABGR_EXT, GL_UNSIGNED_BYTE, PixelData); // 完成绘制
glutSwapBuffers();
} int main(int argc, char* argv[])
{
// 打开文件
FILE* pFile = fopen("/home/aerk/bbb.bmp", "rb");
if( pFile == )
exit(); // 读取图象的大小信息
fseek(pFile, 0x0012, SEEK_SET);
fread(&ImageWidth, sizeof(ImageWidth), , pFile);
fread(&ImageHeight, sizeof(ImageHeight), , pFile); // 计算像素数据长度
PixelLength = ImageWidth * ;
while( PixelLength % != )
++PixelLength;
PixelLength *= ImageHeight; // 读取像素数据
PixelData = (GLubyte*)malloc(PixelLength);
if( PixelData == )
exit(); fseek(pFile, , SEEK_SET);
fread(PixelData, PixelLength, , pFile); // 关闭文件
fclose(pFile); // 初始化GLUT并运行
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(, );
glutInitWindowSize(ImageWidth, ImageHeight);
glutCreateWindow("FileName");
glutDisplayFunc(&display);
glutMainLoop(); // 释放内存
// 实际上,glutMainLoop函数永远不会返回,这里也永远不会到达
// 这里写释放内存只是出于一种个人习惯
// 不用担心内存无法释放。在程序结束时操作系统会自动回收所有内存
free(PixelData); return ;
}
24位版本
#include <GL/glut.h> 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); // 绘制像素
// glBitmap(ImageWidth,ImageHeight,0,0,0.0,0.0,PixelData);
glDrawPixels(ImageWidth, ImageHeight,
GL_BGR_EXT, GL_UNSIGNED_BYTE, PixelData); // 完成绘制
glutSwapBuffers();
} int main(int argc, char* argv[])
{
// 打开文件
FILE* pFile = fopen("/home/aerk/bbb.bmp", "rb");
if( pFile == )
exit(); // 读取图象的大小信息
fseek(pFile, 0x0012, SEEK_SET);
fread(&ImageWidth, sizeof(ImageWidth), , pFile);
fread(&ImageHeight, sizeof(ImageHeight), , pFile); // 计算像素数据长度
PixelLength = ImageWidth * ;
while( PixelLength % != )
++PixelLength;
PixelLength *= ImageHeight; // 读取像素数据
PixelData = (GLubyte*)malloc(PixelLength);
if( PixelData == )
exit(); fseek(pFile, , SEEK_SET);
fread(PixelData, PixelLength, , pFile); // 关闭文件
fclose(pFile); // 初始化GLUT并运行
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(, );
glutInitWindowSize(ImageWidth, ImageHeight);
glutCreateWindow("FileName");
glutDisplayFunc(&display);
glutMainLoop(); // 释放内存
// 实际上,glutMainLoop函数永远不会返回,这里也永远不会到达
// 这里写释放内存只是出于一种个人习惯
// 不用担心内存无法释放。在程序结束时操作系统会自动回收所有内存
free(PixelData); return ;
}
opengl打开本地bmp图片绘制的更多相关文章
- perl打开本地/服务器图片
		
index.html <html> <body> <h2> perl read img </h2> <img src = "displa ...
 - MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
		
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733 ...
 - [转]opengl入门例题(读取bmp图片,并显示)
		
#include<gl/glut.h> #define FileName "bliss.bmp" static GLint imagewidth; static GLi ...
 - OPENGL 显示BMP图片+旋转
		
VS2010/Windows 7/ 1. 需包含头文件 stdio.h, glaux.h, glut.h.需要对应的lib,并添加包含路径 2. 窗口显示用glut库的函数 3. bmp图片从本地读取 ...
 - MFC对话框显示BMP图片
		
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
 - BMP图片格式模型(2)
		
因为公司的主要业务是图像识别相关的,因此对图像处理.识别是我学习的重点.虽然写程序也不少年了,但是对于图像处理领域,我还是一个新兵.对很多基础的概念也还是存在盲区,所以想在边学边做的过程中,对一些概念 ...
 - OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
		
http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序第二 ...
 - bmp图片的有关操作
		
读取bmp图片 并生成新的bmp图片 #include "stdafx.h"#include <windows.h>#include <cmath>#inc ...
 - Windows 保存BMP图片
		
在Windows下保存BMP图片还是挺方便的,直接上代码,拷贝就能用 void savebmp(uchar * pdata, char * bmp_file, int width, int heigh ...
 
随机推荐
- LeetCode 341. Flatten Nested List Iterator
			
https://leetcode.com/problems/flatten-nested-list-iterator/
 - windows远程关机重启
			
windows远程关机 http://lsscto.blog.51cto.com/779396/245681 shutdown http://baike.baidu.com/view/596875.h ...
 - qss 实践
			
*{ font-size:13px; color:white; font-family:"宋体"; } CallWidget QLineEdit#telEdt { font-siz ...
 - IT软件开发 书籍汇总
			
数据库: MYSQL -> Effective MySQL 之 SQL 语句最优化 [美] Ronald Bradford 著 李雪锋 译 清华大学出版社 开发书籍 PHP核心技术与最佳实 ...
 - 【转】C语言 字符数组与字符串
			
原文:http://blog.csdn.net/metasearch/article/details/2856097 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串.总结起来 ...
 - 使用HttpClient发送请求、接收响应
			
使用HttpClient发送请求.接收响应很简单,只要如下几步即可. 1.创建HttpClient对象. CloseableHttpClient httpclient = HttpClients.c ...
 - mysql中的存储过程和事务隔离
			
※存储过程存储过程是保存在数据库上的一段可执行代码.1.定义存储过程的语法是:Create procedure sp_name (参数..)Begin SQL语句End;2.调用它的方法:Call s ...
 - Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
			
使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...
 - Adroid_Spinner_ArrayAdapter
			
XML布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
 - kali linux 2.0 折腾笔记
			
1. 配置SSH远程登录 root@kali:~# vi /etc/ssh/sshd_config #PermitRootLogin without-password PermitRootLogin ...