读书人

用D3DXCreateTexture()怎么加载一个pn

发布时间: 2012-03-08 13:30:13 作者: rapoo

用D3DXCreateTexture()如何加载一个png图像??
主要是LockRect()后,图像数据怎么拷贝进来?。。。。。。
好像要用什么位运算,要解析像素数据到字节数组。

[解决办法]
为什么会选择它呢?

C/C++ code
   HRESULT hr = 0;    hr = D3DXCreateTexture(        _device,        texWidth, texHeight,        0,         0,         D3DFMT_A8L8,//纹理格式        D3DPOOL_MANAGED, &_tex);    if(FAILED(hr))        return false;    D3DSURFACE_DESC textureDesc;     _tex->GetLevelDesc(0, &textureDesc);    if(textureDesc.Format != D3DFMT_A8L8)         return false;    D3DLOCKED_RECT lockedRect;    _tex->LockRect(0, &lockedRect,0, 0);             //使用类型要对应(unsigned short --- D3DFMT_A8L8)    unsigned short* imageData = (unsigned short*)lockedRect.pBits;    for(int i = 0; i < texHeight; i++){        for(int j = 0; j < texWidth; j++){            //Pitch数据的总长度            int index = i * lockedRect.Pitch / 2/*D3DFMT_A8L8 二字节*/ + j;            if(i < 64)                imageData[index] = 0x00;            else                imageData[index] = 0xFF;        }    }    _tex->UnlockRect(0);        //保存纹理    hr = ::D3DXSaveTextureToFile("a.png", D3DXIFF_PNG, _tex, NULL);    if(D3DERR_INVALIDCALL == hr)        ::MessageBox(NULL,NULL,NULL,NULL); 

读书人网 >网络游戏

热点推荐