求めておられる回答と異なるかもしれませんが、
bmp.c の WriteBmp 関数を私が普段使ってるbmp出力のコードに書き換えてみました。
常に RGB 256^3色で保存するので、その点問題になるかもしれません。
C
1static void WrUI(FILE *fp, unsigned int value)
2{
3 fputc((value >> 0) & 0xff, fp);
4 fputc((value >> 8) & 0xff, fp);
5 fputc((value >> 16) & 0xff, fp);
6 fputc((value >> 24) & 0xff, fp);
7}
8void WriteBmp(char *filename, img *tp)
9{
10 FILE *fp = fopen(filename, "wb");
11 unsigned int szimg;
12 int x;
13 int y;
14
15 if(!fp)
16 return; // open error !
17
18 szimg = ((tp->width * 3 + 3) / 4) * 4 * tp->height;
19
20 fputc('B', fp);
21 fputc('M', fp);
22 WrUI(fp, szimg + 0x36);
23 WrUI(fp, 0);
24 WrUI(fp, 0x36);
25 WrUI(fp, 0x28);
26 WrUI(fp, tp->width);
27 WrUI(fp, tp->height);
28 WrUI(fp, 0x00180001);
29 WrUI(fp, 0);
30 WrUI(fp, szimg);
31 WrUI(fp, 0);
32 WrUI(fp, 0);
33 WrUI(fp, 0);
34 WrUI(fp, 0);
35
36 for(y = tp->height - 1; 0 <= y; y--)
37 {
38 for(x = 0; x < tp->width; x++)
39 {
40 color *col = tp->data[y] + x;
41
42 fputc(col->b, fp);
43 fputc(col->g, fp);
44 fputc(col->r, fp);
45 }
46 for(x = tp->width % 4; x; x--)
47 {
48 fputc(0x00, fp);
49 }
50 }
51 fclose(fp);
52}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 00:05