トップページ > 記事閲覧
LoadGraphせずに画像サイズを求める
名前:Ketty 日時: 2015/05/29 20:32

管理人様 いつも楽しくDXライブラリを利用させていただいております(^^) 質問&要望なのですが、 任意の画像ファイルについて、 LoadGraph()するより前に縦・横サイズを取得する手段(関数)はございませんでしょうか? (つまり、GetGraphSize関数を使わずに) 聞きかじった程度の知識なので、的外れかもしれませんが、 DirectXですと、以下のようにファイルパスから直接サイズを取得する手段と、 ファイルロード後にサイズを取得する手段があるようです。  ロード前なら、D3DXGetImageInfoFromFile  ロード後なら、GetLevelDesc もし、LoadGraph関数によっていったん画像データをメモリに展開してからGetGraphSizeすることと、 上記のようにファイル名(パス)からいきなり縦横サイズを取得することとの間に、 パフォーマンス的な差が見込めそうであれば、そういう関数があるとうれしいなと思いました。
メンテ

Page: 1 |

Re: LoadGraphせずに画像サイズを求める ( No.1 )
名前:管理人 日時:2015/05/30 01:37

今のところは LoadGraph や LoadSoftImage で読み込む前にサイズを取得する手段はありません・・・ > もし、LoadGraph関数によっていったん画像データをメモリに展開してからGetGraphSizeすることと、 > 上記のようにファイル名(パス)からいきなり縦横サイズを取得することとの間に、 > パフォーマンス的な差が見込めそうであれば、そういう関数があるとうれしいなと思いました。 もしサイズをチェックした後実際には読み込まない、という場合があるのでしたら当然サイズのみを チェックする関数を用意してそれを使用した方が処理時間は少なくなりますが、 仮にサイズをチェックした後必ず読み込む、ということになりますとサイズのチェックの分だけ 処理時間が長くなってしまいます サイズをチェックするだけで後読み込みは行わない、という場合があるのでしょうか?
メンテ
Re: LoadGraphせずに画像サイズを求める ( No.2 )
名前:Ketty 日時:2015/05/30 12:09

>サイズをチェックするだけで後読み込みは行わない、という場合があるのでしょうか? はい(^^) サイズが、期待の大きさであるときだけ読み込みたいというものです。 おっしゃるとおり、ロードするだけなら、 わざわざサイズ取得してからロードするメリットはないのですが、 サイズ取得後にロードするかしないかを分岐したいというのが目的です。 現在、ユーザー指定の任意のサイズの画像(複数枚)を扱えるツールのようなものを検討しているのですが、 LoadDivGraph関数で分割読み込みする際に、 分割数だけはツール側で決められているけど、 1コマあたりの縦横サイズは任意で、 画像全体サイズは、1コマあたりの横(縦)サイズ × X(Y)方向の分割数でぴったりじゃないとNGにする、 というルールを設けようと思うのですが、 ツールの起動時点で、 特定のディレクトリに設置されたすべての画像ファイルについて一気にチェックして、 NGのものについてはエラー通知したいと思っています。 そこで、その判定をできるだけ早くしてあげたいなと思っています。 現状の構想では、1ファイルずつ、 LoadGraphして、 GetGraphSizeして、 上記判定して、  NGなら、LoadGraphしたハンドルをDeleteGraphしてエラー通知する  OKなら、LoadDivGraphする・・・という流れを予定しているのですが、 先にサイズだけ知ることが出来た方が、スムーズになりそうだなぁと思った次第です。
メンテ
Re: LoadGraphせずに画像サイズを求める ( No.3 )
名前:管理人 日時:2015/05/31 18:30

ご説明ありがとうございます、確かにその都度画像データ全体を読み込むのは無駄になってしまう処理ですね (・・; 画像のサイズだけを取得するための関数を追加したものをアップしましたので よろしければダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 以下の関数を追加しました // 画像ファイルの横ピクセル数と縦ピクセル数を取得する int GetImageSize_File( char *FileName, int *SizeX, int *SizeY ) ; // メモリ上に展開された画像ファイルの横ピクセル数と縦ピクセル数を取得する int GetImageSize_Mem( void *FileImage, int FileImageSize, int *SizeX, int *SizeY ) ; 関数の機能は見ての通りです 一応メモリに読み込まれたファイルからサイズを取得する関数も追加しました (・・; ファイルのオープン自体が結構時間が掛かる処理なのでどのくらい処理時間を短縮できるかわかりませんが、 よろしければお使いください m(_ _)m
メンテ
Re: LoadGraphせずに画像サイズを求める ( No.4 )
名前:Ketty(解決) 日時:2015/05/31 21:30

管理人様 どうもありがとうございました(^^) VisualC++ 用にて、 GetImageSize_File関数が期待通り処理されることを確認しました。 GetImageSize_Mem関数はまだ使っておりませんが、 解決とさせていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存