OpenGL本身没有文件操作有关的接口,需要使用第三方库。这里使用DevIL库。

下载连接:http://openil.sourceforge.net/download.php

下载DevIL-Windows-SDK,解压后在Visual Studio配置头文件位置、lib库位置、lib库名称,拷贝dll库到当前工程。

LTexture.cpp

bool LTexture::loadTextureFromFile( std::string path )
{
  bool textureLoaded = false;

  ILuint imgID = 0;
  ilGenImages( 1, &imgID );//生成图像ID
  ilBindImage( imgID );//绑定

  ILboolean success = ilLoadImage( path.c_str() );//加载图片

  if( success == IL_TRUE )
  {
    success = ilConvertImage( IL_RGBA, IL_UNSIGNED_BYTE );//转换为rgba像素格式
    if( success == IL_TRUE )
    {
      textureLoaded = loadTextureFromPixels32( (GLuint*)ilGetData(), (GLuint)ilGetInteger( IL_IMAGE_WIDTH ), (GLuint)ilGetInteger( IL_IMAGE_HEIGHT ) );//根据图片的像素去创建纹理,ilGetData()方法获取图片的像素
    }

    ilDeleteImages( 1, &imgID );//从内存删除即回收该图片。DevIL和OpenGL有着类似的状态机机制,即先生成并绑定ID,然后进行各做操作,最后解除绑定
  }

  if( !textureLoaded )
  {
    printf( "Unable to load %s\n", path.c_str() );
  }

  return textureLoaded;
}

LUtil.cpp

bool initGL()
{

  ...

  ilInit();//初始化devil
  ilClearColour( 255, 255, 255, 000 );//设置devil自己的渲染清屏颜色

  ILenum ilError = ilGetError();
  if( ilError != IL_NO_ERROR )
  {
    printf( "Error initializing DevIL! %s\n", iluErrorString( ilError ) );
    return false;
  }

  return true;

}

bool loadMedia()
{
  if( !gLoadedTexture.loadTextureFromFile( "texture.png" ) )
  {
    printf( "Unable to load file texture!\n" );
    return false;
  }

  return true;
}

转载于:https://www.cnblogs.com/yongfengnice/p/7885929.html

OpenGL第六节:加载png图片相关推荐

  1. 前端加载超大图片(100M以上)实现秒开解决方案

    前言 前端加载超大图片时,一般可以采取以下措施实现加速: 图片压缩:将图片进行压缩可以大幅减小图片的大小,从而缩短加载时间.压缩图片时需要注意保持图片质量,以免影响图片显示效果. 图片分割:将超大图片 ...

  2. Unity 制作翻书电子书,外部异步加载千张图片(一)

    Unity 制作翻书电子书,外部异步加载千张图片(一) Hello!这是我的第一篇文章,希望在你阅读这篇文章之后对你能有帮助. 之前我做过两次电子书的程序,用的都是网上随便一搜就能找到的插件,很方便, ...

  3. 关于 android 加载 res 图片 out of memory 问题 解决 同样适用于 sd卡图片

    2019独角兽企业重金招聘Python工程师标准>>> 发现android 加载res图片如果过多也会崩溃 android 也是使用 Bitmap  bm = BitmapFacto ...

  4. UIWebView如何加载本地图片

    UIWebView如何加载本地图片 UIWebView加载本地图片是有实用价值的.比方说,有时候我们需要本地加载静态页来显示相关帮助信息,而这些帮助信息当中含有很多很多的富文本,用代码实现难度较大,这 ...

  5. 解决Android 加载大图片OOM

    图片在Android 占用内存计算 假如一张图的像素为100×200,那么他在内存中占用的内存为: 100×200(像素点) × 4(每个像素点占用的内存,默认为4.) public Bitmap.C ...

  6. Android加载大图片OOM异常解决

    Android加载大图片OOM异常解决 参考文章: (1)Android加载大图片OOM异常解决 (2)https://www.cnblogs.com/jevan/archive/2012/07/05 ...

  7. python怎么加载图片-怎样用python加载dicom图片

    用python加载dicom图片的方法:使用pydicom.CV2.numpy.matplotlib等库即可.pydicom库是专门用来处理dicom图像的python专用库. python读取DIC ...

  8. 【Flutter】Image 组件 ( 加载网络图片 | 加载静态图片 | 加载本地图片 | path_provider 插件 )

    文章目录 一.加载网络图片 二.加载静态图片 三.加载本地图片 四.完整代码示例 五.相关资源 一.加载网络图片 参考 [Flutter]Image 组件 ( Image 组件简介 | Image 构 ...

  9. thinkphp+ajax无刷新分页并加载显示图片

    2019独角兽企业重金招聘Python工程师标准>>> 最近自己用thinkphp和bootstrap做一个小站点,在用到ajax与后台数据库交互实现无刷新分页时,因为我需要返回的数 ...

  10. Android手机内存图片读取,有效解决Android加载大图片内存溢出的问题

    今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存溢出了.其实有时候不同的手机和不同的系统对内存的要求不一样,尤 ...

最新文章

  1. JS 小数的常用处理方法
  2. POJ2823 Sliding Window【单调队列】【线段树】【ST表】
  3. java fastutil_具有FastUtil的精简Java集合
  4. ISA系列之三:ISA Server 2004防火墙的基本配置
  5. 计算机怎样旋转桌面,win7电脑怎么设置翻转屏幕
  6. HTML --- 简单的标签
  7. 移动互联消亡者及原因分析
  8. 子程序入口参数是什么_三菱FX PLC | 什么是中断服务?没事多看几遍
  9. php 如何下载,php的包怎么下载
  10. 多字节编码与Unicode码的区别 内码
  11. 在Centos操作系统下安装mysql8.0
  12. 【产品】业务流程+任务流程+页面流程绘制指南
  13. iphone强制旋转屏幕_锁定iPhone屏幕旋转
  14. 红警3修改器无法连接服务器,红警3序列号修改器-不能加入游戏怎么办?红警3连局域网说cd-– 手机爱问...
  15. 向量的方向余弦公式_定位中方向余弦矩阵(DCM)简介
  16. 7个黑科技十足的微信小程序,每一个都能让你念念不舍!
  17. 2022汽车驾驶员(初级)考试模拟100题及模拟考试
  18. 平淡生活:戴戒指的学问
  19. 【如何增加个人气场】
  20. openjudge 开餐馆 【动态规划】

热门文章

  1. vue 渲染函数处理slot_Vue源码全面解析七 initRender 函数(处理渲染相关的函数)...
  2. $ajax 获取返回值object,来自.ajax()调用的数据的jQuery .find()返回“ [object Object]”,而不是di...
  3. php无限分级快速,PHPTree——php快速生成无限级分类_php技巧
  4. 初中计算机ps教程,初中信息技术《认识Photoshop CS2的工作界面》教案
  5. git SSL certificate problem: unable to get local issuer certificate
  6. php用win还是linux系统,做网站选择linux系统还是选择windows系统好?
  7. python写电商网站框架_Python学员感言:电商项目要先把框架搭起来
  8. JAVA→异常、异常类体系结构、try→catch→finally处理异常、throw new Exception(“重构异常“);、throws Exception{ }、自定义异常
  9. Python入门--面向对象的特征-->封装
  10. Python入门--为什么将元组设计为不可变序列