DirectX9中提供了函数D3DXCreateTexureFromFile函数,但是对用户是透明的,不知道其实现,并且在实际当中一般都是用多线程来进行资源的处理,就像自己实现一下 考虑了两种方法来适用后台加载 1 使用Device CreateTexture后,进行后台加载 2 将纹理文件读进内存后,使用D3DXCreateTextureFromFileInMemory进行加载 这里先使用第一种方法 FreeImage是一个有名的开源图像库,支持的图像类型很多,并且有良好的说明文档,Ogre中也使用了该图像库 用设备创建纹理之后,就可以从后台进行加载了,暂时只支持level0的读取 bool LoadImage(const char* filename) { FREE_IMAGE_FORMAT fif=FIF_UNKNOWN; //图像指针 FIBITMAP* dib(0); //图像像素数据指针 BYTE* bits(0); unsigned int width(0),height(0); //获取图像类型 fif=FreeImage_GetFileType(filename,0); if(fif==FIF_UNKNOWN) fif=FreeImage_GetFIFFromFilename(filename); if(fif==FIF_UNKNOWN) return false; if(FreeImage_FIFSupportsReading(fif)) dib=FreeImage_Load(fif,filename); if(!dib) return false; bits=FreeImage_GetBits(dib); width=FreeImage_GetWidth(dib); height=FreeImage_GetHeight(dib); 位图深度 //int depth=FreeImage_GetBPP(dib); 对应D3D中的pitch //int pitch=FreeImage_GetLine(dib); g_pDevice->CreateTexture(width,height,0,D3DUSAGE_AUTOGENMIPMAP,D3DFMT_X8R8G8B8,D3DPOOL_MANAGED,&g_texture,0); D3DLOCKED_RECT rect; //获取Level0的整个矩形以便填充 g_texture->LockRect(0,&rect,0,0); //rect.pBits是void*类型的,这里进行转化,方便寻址 BYTE* p=(BYTE*)rect.pBits; //为什么从height-1开始? //因为D3D的纹理坐标左上角是(0,0),一般图像左下角是(0,0) //所以如果直接按像素对应的话,图像就会上下颠倒 for(int i=height-1;i>=0;--i) { //获取该行数据 BYTE* bitsi=FreeImage_GetScanLine(dib,i); for(int j=0;jUnlockRect(0); //用完了释放 FreeImage_Unload(dib); return true; }

转载于:https://www.cnblogs.com/mhpy/archive/2012/03/16/2400425.html

使用FreeImage加载纹理相关推荐

  1. cocos2dx 3.3 异步加载纹理

    这里以3d场景加载为例,2d情况类似. 先同步加载模型数据和尺寸缩小了100倍的贴图,创建mesh.然后异步加载所有精细纹理并每加载完一个就替换一个,并进入场景. 如此做法的效果是当刚进入场景时看到的 ...

  2. 使用 wxImage 为 OpenGL 加载纹理

    使用 wxImage 为 OpenGL 加载纹理 使用 wxImage 为 OpenGL 加载纹理 使用 wxImage 为 OpenGL 加载纹理 您可以使用 wxImage 为 OpenGL 加载 ...

  3. OpenGL LoadTexture加载纹理的实例

    OpenGL LoadTexture加载纹理 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #define USE_GL3W #include <vermi ...

  4. opengl es java_java – 在Android OpenGL ES App中加载纹理

    1)您应该根据需要分配尽可能多的纹理名称.一个用于您正在使用的每个纹理. 加载纹理是一项非常繁重的操作,会使渲染管道停顿.所以,你永远不应该在游戏循环中加载纹理.您应该在呈现纹理的应用程序状态之前具有 ...

  5. OpenGL加载纹理glGenTextures——内存优化(OpenGL内存泄漏)

    前言 先上图看我程序在加载纹理时,内存泄漏情况: 正常内存大小 5分钟内存泄漏情况 因为程序一直在接收二维数组(图像像素数据)然后实时绘制到界面,所以会一直加载纹理图像,OpenGL产生纹理id函数g ...

  6. lua/cocos加载动画以及可以使用加载纹理的方式来替换图片并且加载个人制作的艺术字体(fnt字体)

    1.加载spine/json(ExportJson)骨骼动画 现在用的比较多 local spineAnim = sp.SkeletonAnimation:create("base/res/ ...

  7. java3d立方体_java3d 立方体 加载纹理

    研究了很久的java3d,从昨天开始研究怎么加载纹理,今天终于搞定.原本想用数组加载图片,但是总是ava.lang.NullPointerException.于是就放弃了 一个个加载..有点傻- 本人 ...

  8. OpenGL.Shader:2-Android Cpp下加载assets图片资源 / 各种格式加载纹理 / 在线找AndroidNative源码

    OpenGL.Shader:2-Android Cpp下读取assets图片资源 / 读取图片加载纹理 / 在线找AndroidNative源码 (AS3.x rebuild出现More than o ...

  9. C-4:对正方体加载纹理

    C-4. 对正方体加载纹理 初始化OpenGL 准备数据 纹理图片准备 建立着色器 顶点着色器 片段着色器 纹理过滤方式的切换 渲染纹理 效果图 作业要求: 1.使用三种纹理过滤方式加载纹理(线性采样 ...

最新文章

  1. Xcode 编译有错误却没有任何可查看错误的issues
  2. javascript中的字典
  3. pytorch笔记: 处理inf和nan数值
  4. android ListView布局之二(是用simpleAdapter绑定数据)
  5. Dubbo 新编程模型之外部化配置
  6. HipHop PHP HHVM资料收集
  7. 08_提升方法Boosting2_统计学习方法
  8. Key为数字的Json数据标准化成标准Json格式
  9. 串口通信软件AccessPort
  10. STM32-CAN通信协议
  11. 要注意工作中邮件的正式性
  12. 光伏谋定生态农村-农业大健康·万祥军:太阳能改革生产方
  13. 全面解读“资金二清”与“信息二清”
  14. Hadoop 启动 HDFS DataNode 时报错:Invalid dfs.datanode.data.dir
  15. 迁移学习与小样本学习
  16. 从零开始之驱动发开、linux驱动(二十九、mmap原理)
  17. 数字化转型六图法:战略地图
  18. 浅析JWT| JWT是啥子,Java构建JWT
  19. Spring源码整体分析
  20. Unity优化材质,清除空引用贴图

热门文章

  1. python中异或运算_python – 基于ID列表有效计算XOR(^)校验和的方法
  2. Python笔记-类的单例模式及重载打印
  3. Qt工作笔记-通过 对象树 或 delete this 释放对象
  4. SQL基础E-R图画法(二)
  5. python中post请求太慢_AJAX post请求每秒钟慢一次[Django]
  6. php去掉字符串末尾数字,PHP-RegEx:删除字符串末尾的数字,并删除特定字符串后的文本...
  7. java 一对多 socket_js作为websocket client,服务用java 点对点、一对多聊天
  8. php获取url返回的json,【求助】本地页面如何取某个URL返回的json
  9. 单机 搭建kafka集群 本地_Kafka单机环境搭建简记
  10. 时间复杂度为m+n,的一种模式匹配,适合子串不是很长的匹配