5色のBMP画像の作成
5色のカラーパレットを使用したBMP画像を作成するプログラムの完成
使用言語:C言語
Macを使用.フォルダからターミナルを起動させて実行
16色bitmap形式を使用
エラー内容
画像は作成できる
だが,真っ黒になってしまう.(黒のカラーパレットしか使われていないのか?)
該当するソースコード
#include<stdio.h>
#include<stdlib.h>
#define x 54 //ヘッダ
#define y 20 //パレット *パレット番号は0~15まで(16色bitmap)
//1つのパレット番号は4bitのデータを参照する
//4bitモード・・・画像データの4bitが1ピクセルに相当する
#define z 128 //画像データ
unsigned char header[x] ,palet[y] ,data[z];
void bmp_header() {
printf("16*16dpiのBMP画像の作成(RGB)\n");
printf("<ヘッダ情報>\n");
printf("ファイルサイズ[byte]:126\n");
printf("オフセット[byte]:62\n");
printf("ヘッダサイズ[byte]:40\n");
printf("画像の幅[pixel]:16\n");
printf("画像の高さ[pixel]:16\n");
printf("色ビット数(1画素におけるビット深度)[bit]:1\n");
printf("圧縮形式:0\n");
printf("圧縮サイズ[byte]:64\n");
printf("水平解像度[px/m]:16\n");
printf("垂直解像度[px/m]:16\n");
printf("色数\n");
printf("重要色数\n");
printf("\n");
//フォーマット種類
header[0]=0x42;
header[1]=0x4d;
//ファイルサイズ
header[2]=0x7e;
header[3]=0x00;
header[4]=0x00;
header[5]=0x00;
//予約領域:1
header[6]=0x00;
header[7]=0x00;
//予約領域:2
header[8]=0x00;
header[9]=0x00;
//オフセット:16色bitにすることで値が変化する?
header[10]=0x3e;
header[11]=0x00;
header[12]=0x00;
header[13]=0x00;
//ヘッダサイズ
header[14]=0x28;
header[15]=0x00;
header[16]=0x00;
header[17]=0x00;
//画像の幅
header[18]=0x10;
header[19]=0x00;
header[20]=0x00;
header[21]=0x00;
//画像の高さ
header[22]=0x10;
header[23]=0x00;
header[24]=0x00;
header[25]=0x00;
//プレーン数
header[26]=0x01;
header[27]=0x00;
//1画素の色数
header[28]=0x04; //5色の場合:16色bitmap
header[29]=0x00;
//圧縮形式
header[30]=0x00;
header[31]=0x00;
header[32]=0x00;
header[33]=0x00;
//圧縮サイズ
header[34]=0x40;
header[35]=0x00;
header[36]=0x00;
header[37]=0x00;
//水平解像度
header[38]=0x10;
header[39]=0x00;
header[40]=0x00;
header[41]=0x00;
//垂直解像度
header[42]=0x10;
header[43]=0x00;
header[44]=0x00;
header[45]=0x00;
//色数
// header[46]=0x00;
header[46]=0x10; //1画素の色数が4:16色bitmapのとき
header[47]=0x00;
header[48]=0x00;
header[49]=0x00;
//重要色数
header[50]=0x00;
header[51]=0x00;
header[52]=0x00;
header[53]=0x00;
//パレット情報 :番号を追加
//1つのパレット番号は4bitのデータを参照する
//1パレットあたり4Byteで表現
//水色:1
palet[4]=0xff;
palet[5]=0xff;
palet[6]=0x00;
palet[7]=0x00;
//ピンク:2
palet[8]=0xff;
palet[9]=0x00;
palet[10]=0xff;
palet[11]=0x00;
//赤:3
palet[12]=0x00;
palet[13]=0x00;
palet[14]=0xff;
palet[15]=0x00;
//黄:4
palet[16]=0x00;
palet[17]=0xff;
palet[18]=0xff;
palet[19]=0x00;
//黒:0
palet[0]=0x00;
palet[1]=0x00;
palet[2]=0x00;
palet[3]=0x00;
//画像データ
//0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 20 04
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//1 0 0 0 0 0 2 0 0 2 0 0 0 0 0 1 82 41
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//1 0 0 0 3 0 3 0 0 3 0 3 0 0 0 B 8a 51
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//0 0 1 0 2 0 2 0 0 2 0 2 0 1 0 0 2a 54
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//1 0 0 0 0 0 3 0 0 3 0 0 0 0 0 1 82 41
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//0 0 1 0 4 0 2 0 0 2 0 4 0 1 0 0 2a 54
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 88 11
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 88 11
//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00
//00 10 00 00 00 00 01 00
data[120]=0x00;
data[121]=0x10;
data[122]=0x00;
data[123]=0x00;
data[124]=0x00;
data[125]=0x00;
data[126]=0x01;
data[127]=0x00;
//00 00 00 00 00 00 00 00
data[112]=0x00;
data[113]=0x00;
data[114]=0x00;
data[115]=0x00;
data[116]=0x00;
data[117]=0x00;
data[118]=0x00;
data[119]=0x00;
//10 00 00 20 02 00 00 01
data[104]=0x10;
data[105]=0x00;
data[106]=0x00;
data[107]=0x20;
data[108]=0x02;
data[109]=0x00;
data[110]=0x00;
data[111]=0x01;
//00 00 00 00 00 00 00 00
data[96]=0x00;
data[97]=0x00;
data[98]=0x00;
data[99]=0x00;
data[100]=0x00;
data[101]=0x00;
data[102]=0x00;
data[103]=0x00;
//10 00 30 30 03 03 00 01
data[88]=0x10;
data[89]=0x00;
data[90]=0x30;
data[91]=0x30;
data[92]=0x03;
data[93]=0x03;
data[94]=0x00;
data[95]=0x01;
//00 00 00 00 00 00 00 00
data[80]=0x00;
data[81]=0x00;
data[82]=0x00;
data[83]=0x00;
data[84]=0x00;
data[85]=0x00;
data[86]=0x00;
data[87]=0x00;
//00 10 20 20 02 02 01 00
data[72]=0x00;
data[73]=0x10;
data[74]=0x20;
data[75]=0x20;
data[76]=0x02;
data[77]=0x02;
data[78]=0x01;
data[79]=0x00;
//00 00 00 00 00 00 00 00
data[64]=0x00;
data[65]=0x00;
data[66]=0x00;
data[67]=0x00;
data[68]=0x00;
data[69]=0x00;
data[70]=0x00;
data[71]=0x00;
//10 00 00 30 03 00 00 01
data[56]=0x10;
data[57]=0x00;
data[58]=0x00;
data[59]=0x30;
data[60]=0x03;
data[61]=0x00;
data[62]=0x00;
data[63]=0x01;
//00 00 00 00 00 00 00 00
data[48]=0x00;
data[49]=0x00;
data[50]=0x00;
data[51]=0x00;
data[52]=0x00;
data[53]=0x00;
data[54]=0x00;
data[55]=0x00;
//00 10 40 20 02 04 01 00
data[40]=0x00;
data[41]=0x10;
data[42]=0x40;
data[43]=0x20;
data[44]=0x02;
data[45]=0x04;
data[46]=0x01;
data[47]=0x00;
//00 00 00 00 00 00 00 00
data[32]=0x00;
data[33]=0x00;
data[34]=0x00;
data[35]=0x00;
data[36]=0x2a;
data[37]=0x54;
data[38]=0x00;
data[39]=0x00;
//10 00 10 00 00 01 00 01
data[24]=0x10;
data[25]=0x00;
data[26]=0x10;
data[27]=0x00;
data[28]=0x00;
data[29]=0x01;
data[30]=0x00;
data[31]=0x01;
//00 00 00 00 00 00 00 00
data[16]=0x00;
data[17]=0x00;
data[18]=0x00;
data[19]=0x00;
data[20]=0x00;
data[21]=0x00;
data[22]=0x00;
data[23]=0x00;
//10 00 10 00 00 01 00 01
data[8]=0x10;
data[9]=0x00;
data[10]=0x10;
data[11]=0x00;
data[12]=0x00;
data[13]=0x01;
data[14]=0x00;
data[15]=0x01;
//00 00 00 00 00 00 00 00
data[0]=0x00;
data[1]=0x00;
data[2]=0x00;
data[3]=0x00;
data[4]=0x00;
data[5]=0x00;
data[6]=0x00;
data[7]=0x00;
}
void bmp_make() {
FILE*fp;
fp=fopen("decide up!!.bmp" ,"wb");
if(fp==NULL){
printf("ファイルを開けません\n");
exit(0);
}
fwrite(header ,4 ,54 ,fp); //1は1pxのこと?
fwrite(palet ,4,20 ,fp);
fwrite(data,4 ,128 ,fp);
fclose(fp);
}
int main(void){
bmp_header();
bmp_make();
printf("正常にファイルが作成されました ファイル名:decide up!!.bmp\n");
return 0;
}
自分で試したこと
パレット番号を画像データにそれぞれ当てた
画像データの数を増やした
1画素における色数が4bitになるようにした
わからないこと
オフセットがどう変わるのか
0 likes
