はじめまして。
現在DXライブラリとC++を用いてゲーム開発をしています。
質問はタイトルの通りです。
なぜこんなことをしたいかというと、非同期読み込みでLoadDivGraphを使いたいからです。
LoadDivGraphに渡すための画像サイズをさくっと取得したいのです。
(ちなみに分割数は別ファイルに記述してます。
そこに画像サイズも書けばいいのではという意見もあるかと思いますが、
分割数そのままでサイズの異なる画像に差し替えってとき等にいろいろ面倒なので・・・)
最初、通常のLoadGraphで仮読み込みをした後にGetGraphSizeで画像サイズを取得しようとしましたが、
非同期読み込みが完了するまではハンドルが有効ではないので、結局LoadGraphが完了するまで待たないといけなくて面倒です。
FileRead_size関数みたいに、中身全部はメモリ上に読まずに画像サイズ(高さと幅)の情報だけ欲しいのですが、何か良い方法はないでしょうか?
画像をロードせずに画像の幅と高さを取得したい
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 画像をロードせずに画像の幅と高さを取得したい
DXライブラリに頼らず自分でファイルヘッダを見ればすぐわかりますがこれではダメですか?
例えばPNGの場合
http://www.setsuki.com/hsp/ext/png.htm
イメージヘッダ IHDR
の中の
0x0008 (4) Chunk Data 画像の幅
0x000C (4) 〃 画像の高さ
に書いてあります。
例えばPNGの場合
http://www.setsuki.com/hsp/ext/png.htm
イメージヘッダ IHDR
の中の
0x0008 (4) Chunk Data 画像の幅
0x000C (4) 〃 画像の高さ
に書いてあります。
-
yuran
Re: 画像をロードせずに画像の幅と高さを取得したい
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3574
恐らく該当する関数を追加して下さっています。
URLは本家様掲示板を貼ってます。
最新版でしたら使用可能でしょう。
恐らく該当する関数を追加して下さっています。
URLは本家様掲示板を貼ってます。
最新版でしたら使用可能でしょう。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 画像をロードせずに画像の幅と高さを取得したい
yuranさんが仰る通りついこの前追加されたようです。
管理人さん神対応ですね・・。最新版Ver 3.14dに存在することを確認しました。
せっかくなので自力でやるサンプルも付けます。
管理人さん神対応ですね・・。最新版Ver 3.14dに存在することを確認しました。
せっかくなので自力でやるサンプルも付けます。
#include "DxLib.h"
typedef struct {
int w,h;
}Size_t;
int cenvertByteOrder(int x){
return ((x & 0xFF000000) >> 24) | ((x & 0x00FF0000) >> 8) | ((x & 0x0000FF000000) << 8) | ((x & 0x000000FF) << 24);
}
bool GetImageSize(char* fileName, Size_t *size){
FILE* fp = fopen(fileName, "rb");
if(fp == NULL){
return false;
}
fseek(fp, 16L, SEEK_SET);
fread(&size->w, sizeof(int), 1, fp);
fread(&size->h, sizeof(int), 1, fp);
fclose(fp);
return true;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
Size_t size={};
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
GetImageSize("test.png", &size);
size.w = cenvertByteOrder(size.w);
size.h = cenvertByteOrder(size.h);
printfDx("w=%d, h=%d", size.w, size.h);
while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen());
DxLib_End();
return 0;
}-
natsu
Re: 画像をロードせずに画像の幅と高さを取得したい
>管理人さん、yuranさん
ご返信ありがとうございます!
最初に管理人さんが仰ったように自力でどうにかするしかないのかなと思っていましたが
既に関数が存在していたとは・・・。
私の調査不足でお手数をかけてしまいすみません。
最新版をDLして使ってみます。
ありがとうございました!
管理人さんもわざわざコードをありがとうございます。
ヘッダ情報を読むには結構面倒なイメージがありましたが案外短く済むのですね・・・。
ご返信ありがとうございます!
最初に管理人さんが仰ったように自力でどうにかするしかないのかなと思っていましたが
既に関数が存在していたとは・・・。
私の調査不足でお手数をかけてしまいすみません。
最新版をDLして使ってみます。
ありがとうございました!
管理人さんもわざわざコードをありがとうございます。
ヘッダ情報を読むには結構面倒なイメージがありましたが案外短く済むのですね・・・。