从资源中加载特殊资源方法

原创 2007年10月13日 10:36:00

在资源中保存了GIF,PNG,ANI等等资源时怎样加载呢?

可以使用如下方法

加载动态图标(光标)的方法

注意再将光标导入到资源时候资源类型输入ANI

// 在一般mfc程序中使用
//HINSTANCE hInstance = AfxGetInstanceHandle();
// 如果是atlcom组件中使用
//HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();
HCURSOR LoadAniCursor(HINSTANCE hInstance, UINT nID)
...{
    HRSRC hRes 
= FindResource(hInstance, MAKEINTRESOURCE(nID), L"ANI");
    
if (hRes == NULL)
    
...{
        ATLTRACE(
"cannot find resource errcode: %d", GetLastError());
        
return NULL;
    }

    DWORD dwSize 
= SizeofResource(hInstance, hRes);
    HGLOBAL hGlob 
= LoadResource(hInstance, hRes);
    
if (hGlob == NULL)
    
...{
        ATLTRACE(
"cannot Load resource errcode: %d", GetLastError());
        
return NULL;
    }

    LPBYTE pBytes 
= (LPBYTE)LockResource(hGlob); 
    HCURSOR hCursor 
= (HCURSOR)CreateIconFromResource(pBytes, dwSize, FALSE, 0x00030000);
    
if (hCursor == NULL)
    
...{
        ATLTRACE(
"cannot create ani cursor errcode: %d", GetLastError());
        
return NULL;
    }

    UnlockResource(hGlob);
    FreeResource(hRes);
    
return hCursor;
}


//成功调用
SetCursor(hAniCursor);

 

上面的方法在非dll(包括ATL com Dll)的普通应用程序中使用是没有问题的。在dll中使用时某些ani(可能有alpha通道32位以上)的加载可能不成功。

 

另外介绍一种在MFC exe程序中使用的最简单的方法在加入ani 文件到资源中时候资源类型输入21( ATL_RT_ANICURSOR的值

加载的方法可以为:

  1.     HCURSOR hAniCur = ::LoadCursor(AfxFindResourceHandle(ATL_MAKEINTRESOURCE(IDR_ANI1),
  2.         ATL_RT_ANICURSOR), ATL_MAKEINTRESOURCE(IDR_ANI1)); 

GIF PNG  图片加载方法(使用了GDI+)

BOOL ImageFromIDResource(HINSTANCE hInstance, UINT nID, LPCTSTR sTR, Image * &pImg)
...{
    HRSRC hRsrc 
= ::FindResource (hInstance, MAKEINTRESOURCE(nID), sTR); // type
    if (!hRsrc)
        
return FALSE;

    
// load resource into memory
    DWORD len = SizeofResource(hInstance, hRsrc);
    BYTE
* lpRsrc = (BYTE*)LoadResource(hInstance, hRsrc);
    
if (!lpRsrc)
        
return FALSE;

    
// Allocate global memory on which to create stream
    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
    BYTE
* pmem = (BYTE*)GlobalLock(m_hMem);
    memcpy(pmem,lpRsrc,len);
    IStream
* pstm;
    CreateStreamOnHGlobal(m_hMem,FALSE,
&pstm);

    
// load from stream
    pImg = Gdiplus::Image::FromStream(pstm);

    
// free/release stuff
    GlobalUnlock(m_hMem);
    pstm
->Release();
    FreeResource(lpRsrc);
    
return TRUE;
}

安装包性能优化,动态加载资源

昨天腾讯课堂有一堂关于安装包性能优化的文章,联系到前段时间做的主题管理功能,发现一种更简便的方法,特此记录一下。想这样一个问题,我要开发一个类似华为的主题管理功能,客户先给了一套主题做为默认的主题,说...
  • asd1031
  • asd1031
  • 2016年08月08日 16:40
  • 1193

Unity中资源动态加载的几种方式比较

http://blog.csdn.net/leonwei/article/details/18406103 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到...
  • OnafioO
  • OnafioO
  • 2014年12月01日 20:47
  • 1399

Unity中的资源加载方法

Unity 3D里有两种动态加载机制:      一是Resources.Load;      一是通过AssetBundle;      其实两者本质上没有什么区别。Resourc...
  • mrzhengttl
  • mrzhengttl
  • 2017年05月12日 00:33
  • 875

Android 资源加载机制详解

Android提供了一种非常灵活的资源系统,可以根据不同的条件提供可替代资源。因此,系统基于很少的改造就能支持新特性,比如Android N中的分屏模式。这也是Android强大部分之一。本文主要讲述...
  • thesingularityisnear
  • thesingularityisnear
  • 2016年06月03日 19:43
  • 3172

游戏项目中的资源加载管理

游戏项目中的资源加载管理简介资源加载主要需要注意以下几点: 资源加载时的缓存,停止,恢复 资源加载时的处理 资源加载未完成与未完成时的处理 资源加载时的恢复与暂停以及缓存项目中使用的工具BulkLoa...
  • suzuiyue
  • suzuiyue
  • 2015年11月14日 17:21
  • 897

【Unity3D】 资源加载方式

1、Resources.Load 2、WWW加载AssetBundle
  • xhyzdai
  • xhyzdai
  • 2015年05月28日 20:27
  • 1218

简单聊聊网页的资源加载优化

移动开发中很重要的一块是资源的加载优化。移动开发由于网速低带宽,高延迟,移动设备小内存,低处理器性能的原因,因此很多时候不得不通过优化前端页面的性能来满足用户对网页加载的预期。前段时间做了相关方面的优...
  • u012903926
  • u012903926
  • 2017年03月02日 09:48
  • 572

Unity中资源动态加载的几种方式比较

初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去。我们在编辑器里看到的Asset中的文件结构只是工作于编辑器环境下的,在游戏中un...
  • leonwei
  • leonwei
  • 2014年01月17日 16:15
  • 65146

QT图片资源的加载与使用

图片是一种资源,而在Qt中,对于资源的使用是有其独特的方式的!      ①:一般来说:资源在内存中是用资源对象树来表示的,该树在程序启动时创建。      ②:而对于资源而言:我们都是需要先将其...
  • guo8113
  • guo8113
  • 2014年06月07日 17:41
  • 1896

cocos2dx资源加载机制(同步/异步)

首先cocos2dx里的资源,有png,plist(pvr),exportjson(json)大致这三类,我们也从这3类去研究相应的加载代码。 本次代码分析基于: cocos2dx3.2 1、...
  • djvc
  • djvc
  • 2015年03月18日 16:00
  • 2975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从资源中加载特殊资源方法
举报原因:
原因补充:

(最多只允许输入30个字)