ゲーム作りに役立つ・・・かもしれない関数を公開3→BMPファイルを出力

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

ゲーム作りに役立つ・・・かもしれない関数を公開3→BMPファイルを出力

投稿記事 by MoNoQLoREATOR » 14年前

横幅、高さ、ファイル名、RGB情報 を放り込むとBMPファイルを出力してくれる関数をつくりましたので公開します。

以下ソースコード

CODE:

#include 
#include 
#include 
#include 

using namespace std;

bool CreateBMP(int width, int height, const char *fileName, const char *dataRGB){
	//RGBデータの編集
		string slicedRGB;
		
		for(int i=0;i<abs(height);i++){
			for(int j=0;j<width*3;j++) slicedRGB += dataRGB[i*width*3 +j];
			for(int j=0;j<width%4;j++) slicedRGB += '\0';
		}

	//ヘッダデータの作成
		char header_buf[54];
	  
		for(int i=0;i<54;i++) header_buf[i] = 0;
		
		header_buf[0] = 'B';
		header_buf[1] = 'M';
		int real_width = width*3 + width%4;
		long data_size = abs(height) * real_width;
		int file_size = data_size + 54;
		memcpy(header_buf + 2, &file_size, sizeof(file_size));
		header_buf[10] = 54;
		header_buf[14] = 40;
		memcpy(header_buf + 18, &width, sizeof(width));
		memcpy(header_buf + 22, &height, sizeof(height));
		int planes = 1;
		memcpy(header_buf + 26, &planes, sizeof(planes));
		int color = 24;
		memcpy(header_buf + 28, &color, sizeof(color));
		long compress = 0;
		memcpy(header_buf + 30, &compress, sizeof(compress));
		memcpy(header_buf + 34, &data_size, sizeof(data_size));
  
	//ファイル出力
		FILE *fp = fopen(fileName,"wb");
		if(fp==NULL) return 0;
		
		fwrite(header_buf,sizeof(char),54,fp);
		fwrite(slicedRGB.c_str(),sizeof(char),data_size,fp);  
	
		fclose( fp );
	
	return 1;
}
成功すると1が、失敗すると0が返ってきます。
引数1[int width]・・・横幅(画像の横の長さ)を指定します
引数2[int height]・・・高さ(画像の縦の長さ)を指定します
引数3[const char *fileName]・・・保存するファイルの名前を指定します。 .bmp をつけてくださ
                    い。
引数4[const char *dataRGB]・・・画像データ(単純にRGBだけの情報を書き連ねたもの)をここに
                    突っ込みます。ただし、左上から右下の順に書いた場合、
                    高さに -1 をかけてください。

使用例

CODE:

int main(){
	char dataBMP[300];
	
	for(int i=0;i<150;i++) dataBMP[i] = 255;	//画像データの作成
	for(int i=150;i<300;i++) dataBMP[i] = 0;	//画像データの作成

	if(CreateBMP(10,-10,"outPut.bmp",dataBMP)) printf("Succeeded!\n");
}
この例では、上半分が白、下半分が黒の10×10のBMP画像ファイル「outPut.bmp」が出力されます。



バグなどございましたらご報告頂けると幸いです。
最後に編集したユーザー MoNoQLoREATOR on 2011年6月18日(土) 11:57 [ 編集 1 回目 ]

コメントはまだありません。