用D3DXCreateTexture()怎么加载一个png图像?

用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);