任意大小的DirectX9纹理(非2 ^ n)

时间:2009-07-27 08:53:45

标签: c++ directx textures

我对DirectX比较陌生,必须处理现有的C ++ DX9应用程序。该应用程序跟踪相机图像并显示一些DirectDraw(即2d)内容。相机的纵横比为4:3(始终),屏幕未定义。

我想加载纹理并将此纹理用作蒙版,因此仅在纹理的蒙版区域内完成内容的跟踪和显示。因此,我想加载一个与相机图像尺寸完全相同的纹理。

我已经完成了加载纹理的所有步骤,但是当我调用GetDesc()时,Width结构的字段HeightD3DSURFACE_DESC具有更大的功能-of-2尺寸。我并不关心用于纹理的实际内存是否针对显卡进行了优化,但我没有找到任何方法来获取硬盘上原始图像文件的尺寸。

我这样做(并且做了,但没有成功)搜索可能只将图像加载到计算机RAM中(不需要图形卡)而不向代码添加新的依赖项。否则我将不得不使用OpenCV(在跟踪时可能是一个好主意),但目前我仍然试图避免包含OpenCV。

感谢您的提示, 诺贝特

2 个答案:

答案 0 :(得分:3)

D3DXCreateTextureFromFileEx参数3和4为

D3DX_DEFAULT_NONPOW2.

之后,您可以使用

D3DSURFACE_DESC Desc;
m_Sprite->GetLevelDesc(0, &Desc);

取高度&宽度。

答案 1 :(得分:1)

D3DXGetImageInfoFromFile可能就是您要找的。

我假设您正在使用D3DX,因为我不认为Direct3D会自动调整任何纹理的大小。