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

解決


こんでんす  2007-02-20 02:35:51  No: 64485

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

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


Blue  2007-02-20 02:44:02  No: 64486

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


こんでんす  2007-02-20 02:48:34  No: 64487

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

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

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


Blue  2007-02-20 02:58:05  No: 64488

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-20 03:34:42  No: 64489

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

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


こんでんす  2007-02-20 19:44:32  No: 64490

できました!

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 19:56:21  No: 64491

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

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

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


こんでんす  2007-02-22 19:36:56  No: 64492

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加