2009-07-27 14 views
0

私は比較的DirectXには新しく、既存のC++ DX9アプリケーションで作業する必要があります。アプリケーションはカメラ画像を追跡し、DirectDraw(すなわち2d)のコンテンツを表示します。カメラのアスペクト比は4:3(常に)で、画面は未定義です。DirectX9任意のサイズのテクスチャ(非2^n)

テクスチャをロードしてこのテクスチャをマスクとして使用したいので、コンテンツの追跡と表示はテクスチャのマスクされた領域内で行われます。したがって、私はカメラの画像とまったく同じサイズのテクスチャをロードしたいと思います。

私はテクスチャをロードするすべての手順を行って、私はフィールドWidthD3DSURFACE_DESC構造体のHeightGetDesc()を呼び出すときに、次の大きなパワーの-2サイズできました。私は、テクスチャに使用されている実際のメモリがグラフィックスカードに最適化されているかどうかは気にしませんが、ハードディスク上の元のイメージファイルのサイズを得る方法はありませんでした。

コードに新しい依存関係を追加することなく、画像をコンピュータのRAMにのみ読み込む(グラフィックカードは必要ありません)可能性を検索します(成功しませんでした)。さもなければ、私はOpenCVを使用しなければならないでしょう(これは、トラッキングに関しては、とにかく良いアイデアかもしれませんが)、現時点ではまだOpenCVを避けようとしています。あなたのヒントのための

おかげで、 ノルベルト

答えて

3

D3DXCreateTextureFromFileEx、あなたは高さ&幅を取得するために

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

を使用することができます。

+0

これは、デバイスが2の非累乗をサポートしている場合に動作します(私が知っている限り、ほぼすべて動作します)。 – CiscoIPPhone

+0

さて、古いカードはおそらくないでしょう。しかし、最近のカードのほとんどすべてがそうです。 – Ricket

+0

実際には、__3rd last__パラメータをD3DXCreateTextureFromFileExに渡すと、幅と高さがD3DXIMAGE_INFOになります – bobobobo

1

D3DXGetImageInfoFromFileは、あなたが探しているものかもしれません。

Direct3Dが自動的にテクスチャのサイズを変更するとは思わないので、私はあなたがD3DXを使用していると仮定しています。その後

D3DX_DEFAULT_NONPOW2. 

ているパラメータ3と4と

関連する問題