所以我找到了这个链接,关于我的问题,但是它是针对C#的:
我有一个包含整数的变量数组。我将其称为"pix[] "。 现在它可以是任何大小,从3到256,以后可能更大。
现在我想做的是将它转换成像素图像。 我还是一个c++新手,所以请见谅。 我尝试下载一些使与libpng一起工作更容易的库,但它们似乎没有起作用(Ubuntu,Code::Blocks)。 因此我有以下问题:
1)如何创建新的位图(使用哪些库,哪个命令)?
2)如何使用“pix[]”的信息填充它?
3)如何保存它?
如果这是问题的转载,我也很高兴获得链接;)
这是我迄今为止的工作成果,感谢您的帮助。
int main(){
FILE *imageFile;
int x,y,pixel,height=2,width=3;
imageFile=fopen("image.pgm","wb");
if(imageFile==NULL){
perror("ERROR: Cannot open output file");
exit(EXIT_FAILURE);
}
fprintf(imageFile,"P3\n"); // P3 filetype
fprintf(imageFile,"%d %d\n",width,height); // dimensions
fprintf(imageFile,"255\n"); // Max pixel
int pix[100] {200,200,200, 100,100,100, 0,0,0, 255,0,0, 0,255,0, 0,0,255};
fwrite(pix,1,18,imageFile);
fclose(imageFile);
}
我还没有完全理解它的作用。 我可以打开输出图像,但它不是数组的正确表示。
如果我改变一些东西,例如使一个二维数组,那么图像查看器告诉我“期望整数”,并且没有显示图像。
到目前为止都还好。由于我有了数组,所以创建了一个名为aufrunden
的函数,以四舍五入到下一个整数,因为我想创建一个正方形图像。
int aufrunden (double h)
{
int i =h;
if (h-i == 0)
{
return i;
}
else
{
i = h+1;
return i;
}
}
这个函数被用于创建图像。如果图像比数组提供的信息大,就像这样(a
是数组的长度)。
double h;
h= sqrt(a/3.0);
int i = aufrunden(h);
FILE *imageFile;
int height=i,width=i;
现在可能会出现数组长度为a=24
的情况。aufrunden
将图像变为3x3,因此它有27个值...这意味着缺少1个像素的值。
更糟糕的是,它只有a=23
长,也创建了一个3x3的图像。
fwrite(pix,1,18,imageFile);
将在这些像素中写入什么信息?最好剩余的值都为0。
*编辑,不用担心,我会在数组末尾添加0,直到填满整个正方形...对不起