所以我找到了关于我的问题的链接,但这是针对C#的

Create a PNG from an array of bytes

我有一个可变的整数数组。
我将其称为“pix []”
目前,它可以是3到256之间的任何大小,以后可能更大。

我现在要做的是将其转换为像素图像。
我仍然是一个noobin c++,所以请原谅。
我试图下载一些使使用libpng更加容易的库,但是它们似乎不起作用(ubuntu,代码:: 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数,因为我想创建一个正方形图像。
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=24aufrunden使图像变为3x3,因此它具有27个值...意味着它缺少1个像素的值。
或更糟糕的是,它只有a=23长。还可以创建3x3图像。
fwrite(pix,1,18,imageFile);将在这些像素中写入哪些信息以供引用?如果remaing值仅为0,那将是最好的。

*编辑没关系,我只会在数组的末尾添加0,直到它填满整个正方形为止...抱歉

最佳答案

考虑使用Netpbm格式(pbm,pgm或ppm)。

这些图像是非常简单的文本文件,无需任何特殊库即可编写。然后使用某些第三方软件(例如ImageMagick,GraphicsMagick或pnmtopng)将您的图像转换为PNG格式。这是描述Netpbm format的Wiki文章。

这是一个简单的PPM图片:

P3 2 3 255
0 0 0       255 255 255
255 0 0     0 255 255
100 100 100 200 200 200

第一行包含“P3”(将其标识为文本PPM的“魔数(Magic Number)”),2(宽度),3(高度),255(最大强度)。
第二行包含第一行的两个RGB像素。
第三行和第四行分别包含第2行和第3行的两个RGB像素。

如果您需要更大范围的强度(最大65535),请使用更大的数字表示最大强度(例如1024)。

马克·谢切尔(Mark Setchell)所编辑的内容超出了这一点-我是有罪的聚会!

图像看起来像这样(当六个像素放大时):

c++ - C++从数字数组创建png/位图-LMLPHP

用于转换和放大的ImageMagick命令是这样的:
convert image.ppm -scale 400x result.png

如果ImageMagick有点笨重,或者难以安装,则可以更简单地使用NetPBM工具(来自here),就像这样(它是一个预编译的二进制文件)
pnmtopng image.ppm > result.png

07-28 02:04
查看更多