以下ソースコード
#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[int width]・・・横幅(画像の横の長さ)を指定します
引数2[int height]・・・高さ(画像の縦の長さ)を指定します
引数3[const char *fileName]・・・保存するファイルの名前を指定します。 .bmp をつけてくださ
い。
引数4[const char *dataRGB]・・・画像データ(単純にRGBだけの情報を書き連ねたもの)をここに
突っ込みます。ただし、左上から右下の順に書いた場合、
高さに -1 をかけてください。
使用例
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");
}
バグなどございましたらご報告頂けると幸いです。