写入bmp文件时遇到困难。 以下是分配矩阵的代码:
// Dynamically allocate matrix for the bitmap and
// while doing so, color it in blue.
Pixel **bmp_matrix = (Pixel**)malloc(config.resolution_height_ *
sizeof(Pixel*));
if (bmp_matrix == NULL)
{
printf("error: out of memory\n");
return MEMORY_ERROR;
}
int rows = 0;
for(; rows < config.resolution_height_; rows++)
{
bmp_matrix[rows] = (Pixel*)malloc(config.resolution_width_ *
sizeof(Pixel));
if (bmp_matrix[rows] == NULL)
{
while(--rows >= 0)
free(bmp_matrix[rows]);
free(bmp_matrix);
printf("error: out of memory\n");
return MEMORY_ERROR;
}
int columns = 0;
for(; columns < config.resolution_width_; columns++)
{
bmp_matrix[rows][columns].red_ = 175;
bmp_matrix[rows][columns].green_ = 175;
bmp_matrix[rows][columns].blue_ = 255;
}
}
以下是编写像素的代码:
int height, width, pad_iterator;
for(height = info_header.height_ - 1; height >= 0; height--)
{
// for(width = 0; width < info_header.width_; width++)
// fwrite(&bmp_matrix[height][width], sizeof(Pixel), 1, bitmap_file);
fwrite(&bmp_matrix[height], sizeof(Pixel), info_header.width_, bitmap_file);
for(pad_iterator = 0; pad_iterator < pad_length; pad_iterator++)
fwrite(&pad, sizeof(Byte), 1, bitmap_file);
}
现在,当我使用被评论的for
循环时,一切都很完美。生成的图像没问题。
但是,我试图用一个fwrite
替换它,所以程序不必迭代循环。
在这种情况下,生成的图像是完全错误的。
任何帮助?
答案 0 :(得分:1)
你的第二次尝试是不正确的。
在评论的写作(fwrite(&bmp_matrix[height][width], sizeof(Pixel), 1, bitmap_file);
)中,您在地址&bmp_matrix[height][width]
使用一个正确的像素。
但是在fwrite(&bmp_matrix[height], sizeof(Pixel), info_header.width_, bitmap_file);
中,您从地址&bmp_matrix[height]
中写入字节...根据bmp_matrix
你应该使用&bmp_matrix[height][0]
ie。一行中的第一个像素的地址或等效(如Peter Schneider所建议的)bmp_matrix[height]
(没有&
)都给出正确的地址。