リソースに挿入したDDS画像の、ファイルサイズを取得するには?

解決


こんでんす  2007-02-19 17:35:51  No: 64485  IP: 192.*.*.*

リソースに、DDS形式の画像を挿入したのですが、これのファイルサイズを
取得する方法はありませんでしょうか?
どなたか知っていらっしゃいましたら、ご教授下さい。

Visual C++ 2003.Netを使用しています。

編集 削除
Blue  2007-02-19 17:44:02  No: 64486  IP: 192.*.*.*

画像としての大きさ(高さ/横幅)ではなく、リソースのサイズであれば
SizeofResource
で取得できませんか?

編集 削除
こんでんす  2007-02-19 17:48:34  No: 64487  IP: 192.*.*.*

早々のご返事をありがとうございます。
申し訳ありません。質問が至りませんでした。
幅と高さの取得です。

「リソースに挿入したDDS画像の、幅と高さを取得するには?」

で、改めてよろしくお願い致します。

編集 削除
Blue  2007-02-19 17:58:05  No: 64488  IP: 192.*.*.*

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/graphics/reference/ddsfilereference/ddsfileformat.asp
より、

サーフェイス フォーマット ヘッダー



dwHeight、dwWidth

を見ればよさそうな気がする。

つまり、マジック値分スキップして、DDSURFACEDESC2 構造体にmemcpyして
dwHeight,dwWidthを参照でいけそう。
(私はDDS形式のファイルを持っていないので試せないです。)

編集 削除
こんでんす  2007-02-19 18:34:42  No: 64489  IP: 192.*.*.*

HPにて記述を読んで参りました。
一度、この方法で試させて頂きます。

Blue様、ご親切にありがとうございました。
確認後、改めて解決の報告と共に、お礼申し上げますね。

編集 削除
こんでんす  2007-02-20 10:44:32  No: 64490  IP: 192.*.*.*

できました!

HANDLE hRDDS = LoadResource(NULL, FindResource(NULL, DDS_ID, R_GROUP));
char  *pBuffer = (char*)LockResource(hRDDS);
pBuffer = pBuffer + sizeof(DWORD);

DDSURFACEDESC2 dds_info;
memcpy(&dds_info, pBuffer, sizeof(DDSURFACEDESC2));

上記内容で、DDSファイルの幅と高さを取得できました。
Blue様、本当にご親切にありがとうございました。
お答え下さらなければ、未だに悩んでいるところでした。
心より感謝致します。

またお世話になることもあるかもしれませんが、
そのときはどうぞよろしくお願い致します。

編集 削除
Blue  2007-02-20 10:56:21  No: 64491  IP: 192.*.*.*

よく考えてみれば、memcpyしなくてもキャストすればできましたね。

DDSURFACEDESC2* pdds_info;
pdds_info = (DDSURFACEDESC2*)pBuffer;

DWORD h = pdds_info->dwHeight;
DWORD w = pdds_info->dwWidth;

編集 削除
こんでんす  2007-02-22 10:36:56  No: 64492  IP: 192.*.*.*

追加情報を書き込んで下さっていたのですね。
すみません。お礼が遅れてしまいました。
解決後まで、ご親切にありがとうございます。
Blueさんのやり方で、もう一度試みてみます。

本当にありがとうございました。

編集 削除