将原始灰度二进制转换为JPEG

Tho*_*ews 6 c# java embedded jpeg grayscale

我有一个C语言源代码,用于嵌入式系统,包含每像素8位灰度图像的数据数组.我负责记录软件,我想将此源代码转换为JPEG(图像)文件.

这是一个代码示例:

const unsigned char grayscale_image[] = {
0, 0, 0, 0, 0, 0, 0, 74, 106, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 
159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 146, 93, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
//...
};
const unsigned int height = 41;
const unsigned int width = 20;
Run Code Online (Sandbox Code Playgroud)

以下是我的问题:(是的,复数)

  1. 您建议将此源文件转换为JPEG的应用程序是什么?
  2. GIMP或Paint可以导入数据的CSV文件吗?
  3. 如果我编写这个自定义应用程序,那么JPEG存在哪些Java库?
  4. C#中存在哪些库来完成此任务?

我拥有以下资源:MS Visio 2010,Gimp,Paint,Java,Eclipse,MS Visual Studio 2010 Professional,wxWidgets,wxFrameBuilder,Cygwin.
我可以用C#,Java,C或C++编写自定义应用程序.

谢谢你的建议.

Cli*_*int 2

使用 java 的问题是将字节获取为整数。在读入时,您需要转换为 int 才能捕获 > 127 的值,因为 java 没有无符号字节。

int height=41;
int width=20;
int[] data = {...};

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
for ( int x = 0; x < width; x++ ) {
  for ( int y = 0; y < height; y++ ) {
  // fix this based on your rastering order
  final int c = data[ y * width + x ];
  // all of the components set to the same will be gray
  bi.setRGB(x,y,new Color(c,c,c).getRGB() );
  }
}
File out = new File("image.jpg");
ImageIO.write(bi, "jpg", out);
Run Code Online (Sandbox Code Playgroud)