DXlibにおけるBMPファイルの読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
namari
記事: 111
登録日時: 11年前

DXlibにおけるBMPファイルの読み込み

#1

投稿記事 by namari » 9年前

白黒BMP画像を読み込み、座標ごとの黒い点のあるなしを配列に入れて、当たり判定として利用したいです。
http://dixq.net/rp/54.html
を参考にして、行なっていたのですが、うまく読み込まれません。
おそらく、freadではなくFileRead_readを使っているせいだと思うのですが、
DxaEncodeを使うため、ファイル入出力にはDXlibで行いたいです。
最終結果として、Pixelにhantei0.bmpの全ての点情報が入っていれば成功ですが、
実際はoutput.pngのように表示されてしまいます。
画像サイズは512*512です。

コード:

//GV.h
/* 2値化した情報を入れるための配列を用意 */
GLOBAL BYTE Pixel[STAGE_MAX][MAP_BMP_Y][MAP_BMP_X];

GLOBAL img_form_t img[MAP_BMP_Y][MAP_BMP_X];

//struct.h
/* ビットマップの色情報を格納するための構造体 */
typedef struct{
        unsigned char col[3];
}img_form_t;

//define.h
/* ビットマップのヘッダサイズ */
#define HEAD 54

/* ビットマップのヘッダサイズ */
#define MAP_BMP_X 512
#define MAP_BMP_Y 512


//load.cpp

//マップチップの当たり判定読み込み
void load_mapchip_check(){
	int i,s_stage,fp,x,y,c,t;
	int sum;
	char fname[255]={};
	unsigned char data[MAP_BMP_X*MAP_BMP_Y*3+HEAD];
	for(s_stage=0;s_stage<STAGE_MAX;s_stage++){
		sprintf(fname,"dat/img/mapchip/hantei%d.bmp",s_stage);
		fp = FileRead_open(fname);//ファイル読み込み
		FileRead_read( data, FileRead_size( fname ), fp );
		t=HEAD;
		for(y=MAP_BMP_Y-1;y>=0;y--){
			for(x=0;x<MAP_BMP_X;x++){
				for(c=0;c<3;c++){
					img[y][x].col[c]=data[t];
					t++;
				}
			}
		}
		for(y=0;y<MAP_BMP_Y;y++){
			for(x=0;x<MAP_BMP_X;x++){
				sum = 0;
				//色の輝度平均を計算
				for(c=0;c<3;c++){
					sum += img[y][x].col[c];
				}
				sum /= 3;
				//0~255の輝度の平均が128以上なら(明るいなら)0、未満なら(暗いなら)1
				if( sum >= 128){
					Pixel[s_stage][y][x] = 0;
				} else {
					Pixel[s_stage][y][x] = 1;
				}
			}
		}
		FileRead_close(fp);
	}
}

//graph.cpp
    for(int y=0;y<MAP_BMP_Y;y++){
        for(int x=0;x<MAP_BMP_X;x++){
            if( Pixel[0][y][x] == 1){
                DrawPixel(x,y,WHITE);
            }
        }
    }

添付ファイル
output.png
output.png (2.63 KiB) 閲覧数: 2733 回
hantei0.png
本当はhantei0.bmpですが、このサイトでbmpは許可されてないので…。
hantei0.png (936 バイト) 閲覧数: 2733 回

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: DXlibにおけるBMPファイルの読み込み

#2

投稿記事 by みけCAT » 9年前

特定のBMPの形式に依存しているようですが、読み込もうとしているBMPファイルは本当にその形式ですか?
素直にLoadSoftImage関数で読み込み、GetPixelSoftImage関数で色の情報を取得した方がいいのではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: DXlibにおけるBMPファイルの読み込み

#3

投稿記事 by みけCAT » 9年前

namari さんが書きました:本当はhantei0.bmpですが、このサイトでbmpは許可されてないので…。
zip形式で圧縮すれば、(十分小さいデータなら)添付できるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
namari
記事: 111
登録日時: 11年前

Re: DXlibにおけるBMPファイルの読み込み

#4

投稿記事 by namari » 9年前

>みけCATさん
>特定のBMPの形式に依存しているようですが、読み込もうとしているBMPファイルは本当にその形式ですか?
>素直にLoadSoftImage関数で読み込み、GetPixelSoftImage関数で色の情報を取得した方がいいのではないでしょうか?

こんな便利な関数があったとは・・・!
できそうです!ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る