资源简介
本程序为OpenGL纹理贴图小程序,图片格式为jpg。代码中如有疑问请指出,会为你一一解答。
代码片段和文件信息
#include “jpegtools.h“
void DecodeJPG(jpeg_decompress_struct* cinfo JPGtexture *pImageData)
{
GLint rowSpan;
//读取JPEG文件头
jpeg_read_header(cinfo TRUE);
// 使用压缩信息开始解压缩
jpeg_start_decompress(cinfo);
// 读取图像大小、像素数据
rowSpan = cinfo->image_width * cinfo->num_components;
pImageData->width = cinfo->image_width;
pImageData->height = cinfo->image_height;
//为pImageData->data分配内存
pImageData->texels = new GLubyte[rowSpan * pImageData->height];
switch (cinfo->num_components)
{
case 1:
{
pImageData->internalFormat = 1;
pImageData->format = GL_LUMINANCE;
break;
}
case 2:
{
pImageData->internalFormat = 2;
pImageData->format = GL_LUMINANCE_ALPHA;
break;
}
case 3:
{
pImageData->internalFormat = 3;
pImageData->format = GL_RGB;
break;
}
case 4:
{
pImageData->internalFormat = 4;
pImageData->format = GL_RGBA;
break;
}
default:
break;
}
//创建每一行数据的指针
GLubyte ** rowPtr = new GLubyte *[pImageData->height];
for (int i = 0; i < pImageData->height; i++)
rowPtr[i] = &(pImageData->texels[(pImageData->height-1-i)*rowSpan]);
//读取像素数据
int rowsRead = 0;
while (cinfo->output_scanline < cinfo->output_height)
{
rowsRead+=jpeg_read_scanlines(cinfo&rowPtr[rowsRead]
cinfo->output_height-rowsRead);
}
// 释放临时使用的指针
delete [] rowPtr;
// 解压缩结束
jpeg_finish_decompress(cinfo);
}
JPGtexture *ReadJPEGFromFile(const char *filename)
{
struct jpeg_decompress_struct cinfo;
JPGtexture *pImageData = NULL; //存放JPEG数据
FILE *pFile;
//打开文件
if((pFile = fopen(filename “rb“)) == NULL)
{
fprintf (stderr “error: couldn‘t open \“%s\“!\n“ filename);
return NULL;
}
// 定义一个错误句柄
jpeg_error_mgr jerr;
//解压缩信息对象指向错误句柄
cinfo.err = jpeg_std_error(&jerr);
// 初始化解压缩对象
jpeg_create_decompress(&cinfo);
//指定数据源
jpeg_stdio_src(&cinfo pFile);
//分配内存,用于存放数据
pImageData = (JPGtexture*)malloc(sizeof(JPGtexture));
// 进行解压缩
DecodeJPG(&cinfo pImageData);
// 释放内存
jpeg_destroy_decompress(&cinfo);
fclose(pFile);
// 返回已经解压缩后的数据
return pImageData;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-04-14 13:16 JPEG_texture\
文件 427514 2016-10-11 13:18 JPEG_texture\car.jpg
文件 287 2016-10-10 13:58 JPEG_texture\Identity.fp
文件 327 2016-10-10 13:57 JPEG_texture\Identity.vp
文件 2756 2016-10-11 14:26 JPEG_texture\jpegtools.cpp
文件 444 2016-10-11 14:24 JPEG_texture\jpegtools.h
文件 5386 2016-10-11 14:20 JPEG_texture\main.cpp
文件 307 2016-10-11 13:25 JPEG_texture\Rectangle.pro
- 上一篇:Qt编写的串口收发数据小程序源码
- 下一篇:OpenGL透视投影小程序源码
相关资源
- VS2012OpenGL配置所需要的全部libdllh文件
- 线性和反向跷跷板中的最大零纹理
- 反向跷跷板中具有破碎的循环对称性
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- 5种爆炸序列帧贴图
- opengl室内场景的绘制,包括碰撞检测
- OpenGL场景漫游
- 用opengl实现的太阳系模型
- OpenGL 3D贪吃蛇程序,很小
- OpenGL爆炸碎片化效果 源码
- OpenGL三茶壶三光源光源绕着茶壶旋转
- 10个OpenGL的源码
- vc写的一个游戏里面三维场景漫游
- OpenGL实现的简单游戏引擎
- OpenGL游戏程序设计源码
- glew最新版本glew1.11.0
- OpenGL 火箭
- 集料表面微观纹理的三维数值模型重
- 天空盒和地面
评论
共有 条评论