我对 DirectX 比较陌生,必须处理现有的 C++ DX9 应用程序。该应用程序对相机图像进行跟踪并显示一些 DirectDraw(即 2d)内容。相机的纵横比为 4:3(始终),屏幕未定义。
我想加载一个纹理并将该纹理用作蒙版,因此仅在纹理的蒙版区域内跟踪和显示内容。因此,我想加载一个与相机图像大小完全相同的纹理。
我已经完成了加载纹理的所有步骤,但是当我调用 GetDesc()
时 Width
和 Height
的字段 D3DSURFACE_DESC
结构是下一个更大的 2 次幂大小。我不关心用于纹理的实际内存是否针对显卡进行了优化,但我没有找到任何方法来获取硬盘上原始图像文件的尺寸。
我确实(曾经做过,但没有成功)寻找一种可能性,即只将图像加载到计算机 RAM 中(不需要显卡),而无需向代码添加新的依赖项。否则我将不得不使用 OpenCV(这在跟踪方面可能是个好主意),但目前我仍然尽量避免使用 OpenCV。
感谢您的指点, 诺伯特
最佳答案
D3DXCreateTextureFromFileEx参数 3 和 4 为
D3DX_DEFAULT_NONPOW2.
之后,你可以使用
D3DSURFACE_DESC Desc;
m_Sprite->GetLevelDesc(0, &Desc);
获取高度和宽度。
关于c++ - 任意大小的 DirectX9 纹理(非 2^n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187157/