【发布时间】:2020-11-23 16:07:59
【问题描述】:
我有以下代码 '''
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int n = 32;
int* img = malloc(sizeof(int)*n*n);
for(int i = 0; i < n*n; i++) {
if(i%n < n/2) {
img[i] = 0;
}
else {
img[i] = 255;
}
}
FILE *fp = fopen("img.ppm", "wb"); /* b - binary mode */
fprintf(fp, "P6\n%d %d\n255\n", n, n);
fwrite(img, sizeof(img), 1, fp);
fclose(fp);
free(img);
}
但这只是生成一个空白图像。我不确定问题出在哪里。
【问题讨论】:
-
P6 PPM NetPBM 图像的每个像素由 3 个字节组成。您正在编写一堆
ints,大概每个 4 或 8 个字节。这可能不是你想要的。此外,我怀疑您误解了sizeof(img)的作用。 -
另请注意,
32x32字节内存块的字节数是16x162D 网格的 4 倍。现在,如果您在16x16网格中为每个元素写入 4 字节,这可能就是您所需要的,但您必须确保这是您所需要的。有关图像格式的详细信息,请参阅PPM Format Specification。