游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4885|回复: 4

D3DXCreateTextureFromFileInMemoryEx创建纹理占用内存很大怎么回事?

[复制链接]

1

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2010-5-15 21:27:00 | 显示全部楼层 |阅读模式
cTexture::cTexture(Core_Graphics *Graphics,WCHAR *Filename,BOOL IsEncryp)
{

        long FileLen;

        FILE *fp;

        if(NULL==(m_Graphics=Graphics))return ;
        if((Graphics->GetDeviceCOM())==NULL) return ;
        if(Filename==NULL) return ;

        fp = _wfopen(Filename,L"rb");
       

        if(fp==NULL)
        {
     MessageBoxShow(L"打开",Filename,L"失败!");
         return;
        }


        //首先将文件的当前位置移到文件的末尾,
        //然后调用函数ftell()获得当前位置相对于文件首的位移,
        //该位移值等于文件所含字节数,就是文件长度

    fseek(fp, 0, SEEK_END);//把fp指针退回到离文件结尾0字节处

        FileLen = ftell(fp);//获取文件长度

        fseek(fp, 0, SEEK_SET);//把fp指针移动到离文件开头0字节处

        unsigned char* imageArray = new unsigned char[FileLen];

   // WCHAR buf[50];
   // wsprintf(buf,L"%d",FileLen);
        //MessageBox(NULL,buf,L"",MB_OK);
        /*
        参 数:用于接收数据的地址(指针)(ptr)
  单个元素的大小(size) :单位是字节而不是位,例如读取一个整数值就是4
  元素个数(nitems)
  提供数据的文件指针(stream)
  返回值:成功读取的元素个数
  */
        fread(imageArray, 1, FileLen, fp);

        fclose(fp);

   if(IsEncryp)//如果有加密,解密
   {
           //解密图片
   }
   else
   {
           m_PicWidth=imageArray[19]|imageArray[18]<<8|imageArray[17]<<16|imageArray[16]<<24;

       m_PicHeight=imageArray[23]|imageArray[22]<<8|imageArray[21]<<16|imageArray[20]<<24;

   }

   if(FAILED(D3DXCreateTextureFromFileInMemoryEx(
           Graphics->GetDeviceCOM(),
           imageArray,
           FileLen,
           m_PicWidth,
           m_PicHeight,
           1,
           0,
           D3DFMT_UNKNOWN,
           D3DPOOL_MANAGED,
           D3DX_FILTER_LINEAR,
           D3DX_DEFAULT,
           0xFFFE00FF,
           NULL,
           NULL,
           &m_Texture)))
   {
     MessageBoxShow(L"加载",Filename,L"失败!");
         return;
   }

delete[] imageArray;
imageArray=NULL;

}
注:我载入的图片(非2次幂大小图片),发现我载入100多M图片竞占用600M内存,
    我检查才代码,排除内存泄漏可能。请高人回答一下原因
我载入的图片格式是PNG类型的

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-5-15 22:11:00 | 显示全部楼层

Re:D3DXCreateTextureFromFileInMemoryEx创建纹理占用内存很大怎么

你载入的是什么图?

1

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2010-5-17 19:54:00 | 显示全部楼层

Re: D3DXCreateTextureFromFileInMemoryEx创建纹理占用内存很大怎么

有没有人知道呀!

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-5-17 22:29:00 | 显示全部楼层

Re:D3DXCreateTextureFromFileInMemoryEx创建纹理占用内存很大怎么

“非2次幂大小图片”

你的图具体是多少width,多少height?

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-5-17 22:33:00 | 显示全部楼层

Re:D3DXCreateTextureFromFileInMemoryEx创建纹理占用内存很大怎么

楼主如果用PNG的话~
PNG由于采用了行程压缩,一百多兆要展开成位图。
如果是非2的n次幂大小,那么D3DX会帮你补齐成2的N次幂。
于是100M变600M。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 17:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表