linux 下 OpenGL 读取 JPG, PNG, TAG 纹理数据

实际读取图片的代码已经上传到我的资源里面; 下面贴出使用例子:

unsigned char*  esLoadJPG(const char *fileName, int *width, int *height, int *size)

{

FILE *f = fopen(fileName, "rb");

fseek(f, 0, SEEK_END);

*size = ftell(f);

fseek(f, 0, SEEK_SET);

unsigned char *data = (unsigned char*)malloc(*size);

fread(data, 1, *size, f);

JpegDecoder dec(data, *size);

dec.init();

dec.decodeJpeg();

*width = dec.getW();

*height = dec.getH();

*size = dec.getSize();

unsigned char *buffer = (unsigned char*)malloc(*size);

memcpy(buffer, dec.getbmpData(), *size);

return buffer;

}

unsigned char*  esLoadTGA (const char *fileName, int *width, int *height, int *size)

{

unsigned char *buffer = NULL;

FILE *f;

unsigned char tgaheader[12];

unsigned char attributes[6];

unsigned int imagesize;

f = fopen(fileName, "rb");

if(f == NULL) return NULL;

if(fread(&tgaheader, sizeof(tgaheader), 1, f) == 0)

{

fclose(f);

return NULL;

}

if(fread(attributes, sizeof(attributes), 1, f) == 0)

{

fclose(f);

return 0;

}

*width = attributes[1] * 256 + attributes[0];

*height = attributes[3] * 256 + attributes[2];

imagesize = attributes[4] / 8 * *width * *height;

*size = imagesize;

buffer = (unsigned char*)malloc(imagesize);

if (buffer == NULL)

{

fclose(f);

return 0;

}

if(fread(buffer, 1, imagesize, f) != imagesize)

{

free(buffer);

return NULL;

}

fclose(f);

return buffer;

}

unsigned char*  esLoadPNG ( const char *fileName, int *width, int *height, int *size)

{

FILE *f = fopen(fileName, "rb");

fseek(f, 0, SEEK_END);

*size = ftell(f);

fseek(f, 0, SEEK_SET);

unsigned char *data = (unsigned char*)malloc(*size);

fread(data, 1, *size, f);

PngDecoder dec(data, *size);

dec.init();

dec.decoderPng();

*width = dec.getW();

*height = dec.getH();

*size = dec.getSize();

unsigned char *buffer = (unsigned char*)malloc(*size);

memcpy(buffer, dec.getbmpData(), *size);

return buffer;

}

时间: 2024-08-10 13:33:31

linux 下 OpenGL 读取 JPG, PNG, TAG 纹理数据的相关文章

Linux下配置文件读取操作流程及其C代码实现

一.概述 Linux具有免费.可靠.安全.稳定.多平台等特点,因此深受广大程序员的欢迎. 为了体现软件产品的灵活性,可添加配置文件存放某些重要的参数,在部署的时候根据实际的安装环境对每个配置项的值进行设置.这就要求程序能够准确读取到各个配置项的值. 本文详细介绍了Linux下配置文件的读取方法及读取操作的C代码实现,为相关的软件开发工作的开展提供了有益的参考. 二.配置文件介绍 为了便于程序处理,对配置文件的命名及内容格式有一些约定,具体如下: 第一,配置文件的后缀为ini,如本文中使用到的配置

linux下opengl的安装(with qt)

sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install libglu1-mesa-dev sudo apt-get install freeglut3-dev qt的.pro文件添加: LIBS += -lglut  \ -lGL linux下opengl的安装(with qt)

linux下使用extundelete恢复ext3/ext4分区数据

Windows平台恢复误删数据so easy,但是linux就没那么简单了,因为没有"回收站".BUT,如果有一天真的不小心误删了文件,那如何是好?那就借助恢复神器extundelete了. 以下均为本人虚拟机上操作,经测试,文件系统ext3/ext4均适用. 一.安装extundelete 1.需要安装依赖包,否则编译不通过 [[email protected] /]#yum install e2fsprogs* -y 2.下载并安装extundelete 下载地址:https://

备忘 Linux下非root用户实现crontab+rsync数据同步权限问题解决办法

如果在命令行手动执行rsync命令可以正常同步数据,但是在crontab定时任务里提示权限失败. 遇到这种情况,可以在rysnc命令里指定用ssh安全隧道方式的同时参数指定使用可以免密码登录对方机器的认证密钥文件. 1,创建一个新的密钥 ssh-keygen -t rsa 2,将密钥添加到对方主机信任中,实现免密码ssh登录 ssh-copy-id -i[密钥文件] [非root用户名]@[对方主机] 3,再在crontab里跑rsync试试 rsync -e'ssh -p22 -i[你的密钥文

LINUX下目标文件的BSS段、数据段、代码段

http://blog.chinaunix.net/uid-27018250-id-3867588.html bss 未初始化的全局数据 data 已经初始化的全局数据 text 代码段,机器指令 rodata 字符串常量 参考:<程序员自我修养> 代码编译后的机器指令经常被放在代码段里,代码段名为".text";已初始化的全局变量和已初始化的局部静态变量经常放在数据段里,数据段名为".data";未初始化的全局变量和未初始化局部静态变量一般放在“.bs

Linux下一个简单的日志系统的设计及其C代码实现

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题. 因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux

Linux下时间范围判断的程序流程及其C代码实现

一.概述 在实际的软件开发项目中,经常会遇到需要判断时间范围的情况.例如,某软件要在某段时间内执行对过期数据的清理,在其它时间段不执行.为了体现程序的灵活性,一般都是在配置文件中设置时间段的始末值,这样可根据软件的实际安装环境进行配置.本文介绍判断当前时间是否在配置的时间范围内的程序流程,并给出了C代码实现.具体的需求描述如下: 在配置文件中按需配置某一开始时间和结束时间,编写程序判断当前系统时间是否在配置时间的范围之内.配置的时间格式为:HH:MM(小时:分),如08:30表示8点30分. 二

用Go语言在Linux下调用新中新DKQ-A16D读卡器,读二代证数据

1.背景 前几天用Python在Linux下成功的获取了二代证数据,最近正在学Go语言,这两天想着用Go语言也实现一下试看看. 2.开搞C++ 这次就比较简单了,直接把CppDemo里面的SynReader.h拿来就可以,还有就是把CppDemo里面的lib文件也复制过来就可以, 具体流程和Python那篇文章的一样 被我精简后的SynReader.h 1 #ifndef SYN_READER_H 2 #define SYN_READER_H 3 4 #ifdef __cplusplus 5 e

socket在windows下和linux下的区别

windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 ------ 转载 & 修改(待整理) socket相关程序从windows移植到linux下需要注意的 1)头文件 windows下winsock.h/winsock2.h linux下sys/socket.h 错误处理:errno.h 2)初始化 windows下需要用WSAStartup linux下不需要 3)关