ページ 1 / 1
VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月28日(月) 19:49
by moba
お世話になっています。
キャラチップ画像を分割して読み込みたいです。
検索しても特にヒットさせられなかったので質問させていただきました。
LoadDivGraphを使うには引数に(
追記:分割後の1枚当たりの)画像のサイズが必要なので、
キャラチップの大きさが分からない時は、
単純にLoadDivGraphを使うわけにはいかないようです。
なるべく無駄を減らして画像の大きさを取得することはできないでしょうか。
あらかじめ分かっているのは、画像の横と縦の分割数です(6,4)。
DxLibリファレンスページ(下記)を見て、2つの方法を考えました。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
いずれもLoadDivGraphで大きな無駄が出ているのかなと思います。(処理負荷の面で)。
1.LoadDivGraphを使い捨てる
LoadGraph → GetGraphSize →DeleteGraph → LoadDivGraph
► スポイラーを表示
コード:
//画像のサイズを取得する
char fileName = "Picture/charachip_a.png";
int width = 0; int height = 0;
int handTemp = LoadGraph(fileName,FALSE);
GetGraphSize(handTemp,&width,&height);
DeleteGraph(handTemp,0);//使い捨て
//頑張ってLoadDivGraphを使う
int *graphDiv = new int[6*4];
LoadDivGraph(fileName,6*4,6,4,width,height,graphDiv,TRUE);
2.LoadGraph → GetGraphSize → DerivationGraph → DeleteGraph
► スポイラーを表示
コード:
//まず画像を読み込む
char fileName = "Picture/charachip_a.png";
int width = 0; int height = 0;
int chipHandle = LoadGraph(fileName,FALSE);
GetGraphSize(handTemp,&width,&height);
//読み込んだ画像からDrivationGraphで新しい画像を作ることで分割する(省略)
DeleteGraph(chipHandle,0);//LoadDivGraphで読み込んだ画像を使い捨て
最後に、2番目の方法は、1番目の方法よりも無駄が少ないでしょうか。
Re: VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月28日(月) 20:24
by softya(ソフト屋)
LoadGraph → GetGraphSize → DrawRectGraph
という手もあります。
Re: VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月28日(月) 20:28
by softya(ソフト屋)
DerivationGraph は元の画像は消せなかったかも。
リソースの無駄は2番目が少ないかなと思いますが、作者ではないので断言はできません。
実測してみてください。
Re: VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月28日(月) 23:15
by yuran
Re: VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月29日(火) 16:53
by moba
> softyaさん (誤送信を16.56に修正)
いつもありがとうございます。
その方法もあったのですね。場合によってはその方法が一番になるかもしれませんね。
あと、やっぱり処理負荷は自分で測らないとダメですね…。
今は腰が重いのですが、いつかやりたいです。
>yuranさん
ありがとうございます。
リファレンスページには載っていませんが、
今のバージョンのDxLibにもこれらの関数はあるみたいですね。
(まさか画像サイズの取得に最適化? された関数が本当に実装されているとは思いませんでした)
---
// 画像ファイルの横ピクセル数と縦ピクセル数を取得する
int GetImageSize_File( char *FileName, int *SizeX, int *SizeY ) ;
// メモリ上に展開された画像ファイルの横ピクセル数と縦ピクセル数を取得する
int GetImageSize_Mem( void *FileImage, int FileImageSize, int *SizeX, int *SizeY ) ;
---
今は手頃なのでこれを使って、本格的に負荷を考える時には
上記3つの方法と負荷を比較してみようと思います。
Re: VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月30日(水) 05:35
by hide
そんなに画像読み込みの負荷が気になるならメタ情報的なファイルを作ってそっちを先に読んでおくのは?
メモリ的にはほんの少しだけ無駄かも知れませんが、オーバーヘッドは減るんじゃないかなぁ
Re: VC++/DxLib 大きさが分からない画像の分割読み込み
Posted: 2015年12月31日(木) 14:56
by moba
> hideさん
ありがとうございます。
画像の大きさをあらかじめ入力しておいたファイルを読むということでしょうか。
今は負荷が気になるほどのことはしていないのですが、将来重くなったら試してみます。
画像ファイルのプロパティのコメント欄なんかにサイズを書いておいて、分割読み込みする関数からそれを読むこともできるのかなと思いました。