加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C从数组中创建png /位图

发布时间:2020-12-16 10:36:31 所属栏目:百科 来源:网络整理
导读:所以我发现这个关于我的问题的链接,但它是针对c# Create a PNG from an array of bytes 我有一个变量int数组. 我会称之为“pix []” 现在它可以是3到256之间的任何大小,之后可能更大. 我现在想做的是将其转换为像素图像. 我仍然是一个noobin c,请原谅我. 我
所以我发现这个关于我的问题的链接,但它是针对c#

Create a PNG from an array of bytes

我有一个变量int数组.
我会称之为“pix []”
现在它可以是3到256之间的任何大小,之后可能更大.

我现在想做的是将其转换为像素图像.
我仍然是一个noobin c,请原谅我.
我试图下载一些使libpng更容易使用的库,但它们似乎不起作用(ubuntu,code :: blocks)
所以我有以下问题:

1)如何创建新的位图(哪个libaries,哪个命令)?

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,"P3n");           // P3 filetype
 fprintf(imageFile,"%d %dn",width,height);   // dimensions
 fprintf(imageFile,"255n");          // Max pixel
  int pix[100] {200,200,100,255,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 = 24长. aufrunden使图像3×3所以它有27个值…意味着它缺少1个像素的值.
或者更糟糕的是它只有23秒长.还创建了一个3×3图像.

什么会fwrite(pix,imageFile);用这些像素写信息?如果剩余值仅为0,那将是最好的.

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

解决方法

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

这些图像是非常简单的文本文件,您可以在没有任何特殊库的情然后使用某些第三方软件(如ImageMagick,GraphicsMagick或pnmtopng)将图像转换为PNG格式.这是一篇描述Netpbm format的维基文章.

这是一个简单的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的“幻数”),2(宽度),3(高度),255(最大强度).
第二行包含顶行的两个RGB像素.
第三行和第四行各包含行2和3的两个RGB像素.

如果您需要更大的强度范围(最大65535),请使用更大的数字以获得最大强度(例如1024).

Mark Setchell编辑超越这一点 – 所以我是一个有罪的派对!

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

enter image description here

要转换和放大的ImageMagick命令是这样的:

convert image.ppm -scale 400x result.png

如果ImageMagick有点重量级,或者难以安装,你可以更简单地使用NetPBM工具(从here开始)这样(它是一个预编译的二进制文件)

pnmtopng image.ppm > result.png

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读