• ベストアンサー

DirectXのテスクチャから画像データを取れますか?

複数の小さなパーツ画像を読み込んで、 一枚の大きめのテスクチャを複数作りたいのですが このサイトにあるような http://marupeke296.com/DXG_CreateTextureMethod.html テスクチャ作成関数から 画像データ(RGB)をBYTE配列等へコピーする事は出来るのでしょうか? それともやはり、デバイスコンテキスト等を使わないと無理でしょうか? 可否だけでも構いませんので、教えて下さると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  可能です。IDirect3DTexture9::LockRectメソッドを使用します。  http://msdn.microsoft.com/ja-jp/library/cc324038.aspx  テクスチャからサーフェースを取り出している場合は、IDirect3DSurface9::LockRectメソッドを使用します。  http://msdn.microsoft.com/ja-jp/library/cc324048.aspx  以下はアイコンファイルを開いて、テクスチャから取り出したサーフェースに向かってピクセルコピーをしたものです。  便宜的にアイコンからピクセルを取り出す為にHDCを使用していますが、取ったピクセルをテクスチャイメージへのポインタに向かって書き込んでいます。  http://oshiete1.goo.ne.jp/qa4501830.html  取り出したポインタはy軸を逆転計算させなければいけない事と、以下の構造体のPitchメンバを使用して1ライン毎の移動量を計算しなければいけない事に注意して下さい。  http://msdn.microsoft.com/ja-jp/library/cc323934.aspx

zaxs5968
質問者

お礼

可能なのですね。ありがとうございます。 そしてすいません、初歩的な質問かもなのですが、 3番目のリンクのコード ::D3DXCreateTexture(pDevice, ~省略~); 上の部分で >error C2039: 'D3DXCreateTexture' : '`global namespace'' のメンバではありません。 >error C3861: 'D3DXCreateTexture': 識別子が見つかりませんでした とエラーが出てしまいます。 「::」スコープ解決演算子は同名の関数・変数が有る場合に グローバルに有るものを呼ぶと学んだのですが、この場合は違うのでしょうか? 4番目のリンクのD3DLOCKED_RECT 構造体は別の事で扱っていたので そこは多分なんとか出来ると思います。 注意してくれてありがとうございます。 自分でも調べなおしていますが、「::」について教えて頂けると幸いです。

その他の回答 (1)

回答No.2

 こんにちは。御礼頂きました。  「::」の解釈については其れで合っている筈です。  D3DXと付く関数やインターフェースはD3Dに対する拡張ライブラリの方なので、  #include<d3dx9.h>  をインクルードしていないと使えない筈です。    http://msdn.microsoft.com/ja-jp/library/cc372290.aspx  http://msdn.microsoft.com/ja-jp/library/cc372751.aspx

zaxs5968
質問者

お礼

本当にありがとうございます! 該当部分のヘッダーがd3d9.hしか読み込んでいませんでした; そして、D3DXは拡張されたものだったのですね。 MSDNの関数紹介の最下部にヘッダー情報が付いている事、 スコープ解決演算子の実例、ほんとに色々と勉強になりましたっ ありがとうございましたっ!

関連するQ&A