BMPファイルの作成方法について
Posted: 2011年6月13日(月) 20:52
BMPファイルを作成するプログラムをつくっているのですが、うまく作成できませんでした。
とりあえず、10×10の大きさの真っ白なBMPファイルを作成しようとして下記のようなソースコードを書いてみました。
Windows Picture and Fax Viewerで表示させようとすると、「描画できませんでした」と出ました。
「ペイント」で開いてみると、右上に黒い部分がある画像が表示されました。
おそらくヘッダ部分のどこかが間違っているのだと思うのですが、私にはわかりません。
ご教授よろしくお願いいたします。
とりあえず、10×10の大きさの真っ白なBMPファイルを作成しようとして下記のようなソースコードを書いてみました。
#include <stdio.h>
#include <string.h>
int main(){
FILE *fp;
char header_buf[54];
int height=10, width=10;
header_buf[0] = 'B';
header_buf[1] = 'M';
int real_width = width*3 + width%4;
int file_size = height * real_width + 54;
memcpy(header_buf + 2, &file_size, sizeof(file_size));
header_buf[6] = 0;
header_buf[7] = 0;
header_buf[8] = 0;
header_buf[9] = 0;
header_buf[10] = 54;
header_buf[11] = 0;
header_buf[12] = 0;
header_buf[13] = 0;
header_buf[14] = 40;
header_buf[15] = 0;
header_buf[16] = 0;
header_buf[17] = 0;
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));
long data_size = height * real_width;
memcpy(header_buf + 34, &data_size, sizeof(data_size));
long xppm = 1, yppm = 1;
memcpy(header_buf + 38, &xppm, sizeof(xppm));
memcpy(header_buf + 42, &yppm, sizeof(yppm));
header_buf[46] = 0;
header_buf[47] = 0;
header_buf[48] = 0;
header_buf[49] = 0;
header_buf[50] = 0;
header_buf[51] = 0;
header_buf[52] = 0;
header_buf[53] = 0;
fp = fopen("outPut.bmp","wb");
fwrite(header_buf,sizeof(char),54,fp);
fclose( fp );
char str[31];
for(int i=0;i<30;i++) str[i] = 255;
str[30] = '\0';
fp = fopen("outPut.bmp","ab");
for(int i=0;i<10;i++) fputs(str,fp);
fclose( fp );
printf("END!");
}「ペイント」で開いてみると、右上に黒い部分がある画像が表示されました。
おそらくヘッダ部分のどこかが間違っているのだと思うのですが、私にはわかりません。
ご教授よろしくお願いいたします。