「ゲームプログラミング/画像ファイルの作成プログラム」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎PackBits: バッファオーバーラン;未初期化変数
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎コード例: リファクタリング;主にマジックナンバーの排除
タグ: 2017年版ソースエディター
430 行
#include <stdio.h>
 
#pragma warning(disable : 4996)
 
int main() {
FILE *fp1 = fopen("test1change.bmp", "wb");
{
FILE *fp1 = fopen("test1change.bmp", "wb");
if (fp1 == NULL) {
perror("ファイルを開けませんでした。\n");
return 1;
}
else {
printf("ファイルをオープンしました。\n");
}
 
if (fp1 == NULL) {
printf("バイナリファイルに書き込んでいます。 \n");
perror("ファイルを開けませんでした。");
charreturn buf[170] = {1;
}
printf("ファイルをオープンしました。\n");
// 1 line
0x42, 0x4d, //
0x82,0,0, 0, //ファイルサイズ
0,0, //予約領域
0,0, //予約領域
0x76,0,0,0, // ヘッダサイズ
0x28,0,0,0, // 情報ヘッダサイズを4バイトで指定
 
printf("バイナリファイルに書き込んでいます。 \n");
// 2 line
05, 00, 00, 00, // 画像の横幅
03, 00, 00, 00, // 画像の高さ
01, 00, // プレーン数
04, 00, // 色ビット数
00, 00, 00, 00, // 圧縮形式
//3 line
0x0C, 0x00, 00, 00, // 画像データ部分のサイズ 12バイト(コード下部の画素の合計バイトと一致)
0xC4, 0x0E, 00, 00, // 横方向の解像度
0xC4, 0x0E, 00, 00, // 縦方向の解像度
00, 00, 00, 00, // パレット数
00, 00, 00, 00, // 重要な色数
// ここから画像
 
char buf[] = {
// カラーパレット
00, 00, 00, 00, // 0
00, 00, 0x80, 00, // 1
00, 0x80, 00, 00, // 2
00, 0x80, 0x80, 00, // 3
0x80, 00, 00, 00, // 4
0x80, 00, 0x80, 00, // 5
0x80, 0x80, 00, 00, // 6
0x80, 0x80, 0x80, 00, // 7
0xC0, 0xC0, 0xC0, 00,// 8
00, 00, 0xFF, 00, // 赤 9
00, 0xFF, 00, 00, // 緑 A
00, 0xFF, 0xFF, 00, // B
0xFF, 00, 00, 00, // 青 C
0xFF, 00, 0xFF, 00, // 計算上は紫だが実際はピンク D
0xFF, 0xFF, 00, 00,// E
0xFF, 0xFF, 0xFF, 00, // 白 F
//画素
0xBB, 0xBB, 0xB0, 00, // 4バイトなのは偶然
0xBB, 0xBB, 0xB0, 00,
0xBB, 0xbb, 0xB0, 00,
};
fwrite(buf, 1, 130, fp1);
 
// 1 line
fclose(fp1);
0x42,
printf("ファイルをクローズしました。\n");
0x4d, //
0x82,
0,
0,
0, //ファイルサイズ
0,
0, //予約領域
0,
0, //予約領域
0x76,
0,
0,
0, // ヘッダサイズ
 
0x28,
0,
0,
0, // 情報ヘッダサイズを4バイトで指定
 
// 2 line
05,
00,
00,
00, // 画像の横幅
03,
00,
00,
00, // 画像の高さ
01,
00, // プレーン数
04,
00, // 色ビット数
00,
00,
00,
00, // 圧縮形式
 
// 3 line
0x0C,
0x00,
00,
00, // 画像データ部分のサイズ
// 12バイト(コード下部の画素の合計バイトと一致)
0xC4,
0x0E,
00,
00, // 横方向の解像度
0xC4,
0x0E,
00,
00, // 縦方向の解像度
00,
00,
00,
00, // パレット数
00,
00,
00,
00, // 重要な色数
// ここから画像
 
// カラーパレット
00,
00,
00,
00, // 0
00,
00,
0x80,
00, // 1
00,
0x80,
00,
00, // 2
00,
0x80,
0x80,
00, // 3
0x80,
00,
00,
00, // 4
0x80,
00,
0x80,
00, // 5
0x80,
0x80,
00,
00, // 6
0x80,
0x80,
0x80,
00, // 7
0xC0,
0xC0,
0xC0,
00, // 8
00,
00,
0xFF,
00, // 赤 9
00,
0xFF,
00,
00, // 緑 A
00,
0xFF,
0xFF,
00, // B
0xFF,
00,
00,
00, // 青 C
0xFF,
00,
0xFF,
00, // 計算上は紫だが実際はピンク D
0xFF,
0xFF,
00,
00, // E
0xFF,
0xFF,
0xFF,
00, // 白 F
 
//画素
0xBB,
0xBB,
0xB0,
00, // 4バイトなのは偶然
0xBB,
0xBB,
0xB0,
00,
0xBB,
0xbb,
0xB0,
00,
};
fwrite(buf, sizeof *buf, sizeof buf / sizeof *buf, fp1);
 
fclose(fp1);
printf("ファイルをクローズしました。\n");
}
</syntaxhighlight>