c - unsigned char Pixel_intensity[] 到图像; C 代码、Linux

标签 c linux image pixel

我有一个像素强度的数据数组(例如 unsigned char Pixel_intensity[4] = {0, 255, 255, 0}),我需要在 C 代码中创建图像Linux(树莓派)。

最简单的方法是什么?

最佳答案

我建议使用 netpbm 格式,因为它非常容易编程。据记录herehere .

我编写了一个小演示,说明如何将简单的灰度渐变写入下面的 100x256 图像。

#include <stdio.h>
#include <stdlib.h>

int main(){

   FILE *imageFile;
   int x,y,pixel,height=100,width=256;

   imageFile=fopen("image.pgm","wb");
   if(imageFile==NULL){
      perror("ERROR: Cannot open output file");
      exit(EXIT_FAILURE);
   }

   fprintf(imageFile,"P5\n");           // P5 filetype
   fprintf(imageFile,"%d %d\n",width,height);   // dimensions
   fprintf(imageFile,"255\n");          // Max pixel

   /* Now write a greyscale ramp */
   for(x=0;x<height;x++){
      for(y=0;y<width;y++){
         pixel=y;
         fputc(pixel,imageFile);
      }
   }

   fclose(imageFile);
}

图像的标题如下所示:

P5
256 100
255
<binary data of pixels>

图像看起来像这样(我已将其制成 JPEG 以便在此处渲染)

enter image description here

获得图像后,您可以使用出色的 ImageMagick ( here ) 工具将图像转换为您喜欢的任何其他内容,例如如果您希望将上述创建的灰度转换为 JPEG,只需使用 ImageMagick 即可,如下所示:

convert image.pgm image.jpg

或者,如果你想要PNG

convert image.pgm image.png

其实你可以直接在网页上使用PGM格式的图片,按照惯例,MIME类型是image/x-portable-graymap

关于c - unsigned char Pixel_intensity[] 到图像; C 代码、Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22364686/

相关文章:

linux - 在 UNIX 中从命令行调用另一个脚本

c++ - 在图像中的一些点周围绘制边界

python - 将图像转换为 numpy 数组,然后立即将其转换回图像会产生两种不同的结果

linux - 在 Linux 中的文件旁边添加注释

c - Linux:执行手动加载到内存的代码

c++ - 如何在我的 C++ 程序中访问 `addr2line` 功能?

c - 全局变量在线程中没有改变?

linux - 记录到非阻塞命名管道?

JavaScript promise 以相反的顺序加载

将长数字转换为 C 中的日期、时间