我正在尝试设计一个将位图图像加载到内存中并最终显示它的函数。我正在使用 Watcom 16 位 C 编译器编译代码,目标设置为 DOS。我在 DOSBox 中运行程序。代码如下:
#ifndef __BITMAP_H__
#define __BITMAP_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct DIB
{
int header_size;
int px_width;
int px_height;
}DIB_t;
DIB_t *load_bitmap(char *file_name)
{
FILE *bmp_file;
DIB_t *bitmap;
char garbage[4];
int c, file_size, pixel_offset;
bitmap = (DIB_t*)malloc(sizeof bitmap);
if(!bitmap)
{
perror("malloc()");
return NULL;
}
bmp_file = fopen(file_name, "rb");
if(!bmp_file)
{
perror("fopen()");
return NULL;
}
c = fgetc(bmp_file);
if(c == 'B')
{
c = fgetc(bmp_file);
if(c == 'M')
{
fread(&file_size, 4, 1, bmp_file);
fread(garbage, 1, 4, bmp_file);
fread(&pixel_offset, 4, 1, bmp_file);
fread(&bitmap->header_size, 4, 1, bmp_file);
fread(&bitmap->px_width, 4, 1, bmp_file);
fread(&bitmap->px_height, 4, 1, bmp_file);
printf("BMP width: %dpx\nBMP Height: %dpx", bitmap->px_width, bitmap->px_height);
fclose(bmp_file);
return bitmap;
}
}
fputs("File format not supported.\n", stderr);
fclose(bmp_file);
return NULL;
}
#endif
当你运行这个程序时,它会输出:"BMP width: %dpx\n" 但是换行符后面什么都没有?我觉得这非常奇怪。我已经确认没有任何操作失败或设置 errno 并且 px_height 实际上设置为它的适当值。你们中有人有过这种经历吗?