0

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

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

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

我确实(并且确实,但没有成功)搜索了一种可能性,即仅将图像加载到计算机 RAM 中(不需要显卡)而不向代码添加新的依赖项。否则我将不得不使用 OpenCV(在跟踪方面这可能是一个好主意),但目前我仍然尽量避免包含 OpenCV。

谢谢你的提示,诺伯特

4

2 回答 2

3

D3DXCreateTextureFromFileEx,参数 3 和 4 为

D3DX_DEFAULT_NONPOW2.

之后,您可以使用

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

获取高度和宽度。

于 2009-07-27T09:45:17.010 回答
1

D3DXGetImageInfoFromFile可能是您正在寻找的。

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

于 2009-07-27T09:23:26.587 回答