我有2D数组(它只有1 -0值),但它的类型是int [] []。
现在我想将该数组转换为图像(黑白二进制图像)。但我无法为我的问题找到合适的答案。我搜索了谷歌和这个网站。任何人都可以帮助我吗?
我已尝试过以下代码,但
String path = "C:\\Users\\Cyrus\\Desktop\\test.jpg";
BufferedImage image = new BufferedImage(b.length, b[0].length, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < b.length; x++) { // b is my 2D array
for (int y = 0; y < b[x].length; y++) {
image.setRGB(x, y, b[x][y]);
}
}
File ImageFile = new File(path);
try {
ImageIO.write(image, "jpg", ImageFile);
} catch (IOException e) {
e.printStackTrace();
}
//修改我的代码后
String path = "C:\\Users\\Cyrus\\Desktop\\test.jpg";
BufferedImage image = new BufferedImage(a.length, a[0].length, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < a.length; x++) {
for (int y = 0; y < a[x].length; y++) {
int value ;
if(a[x][y]==1) value = new Color(255,255,255).getRGB();
else value = new Color(0,0,0).getRGB();
image.setRGB(x, y, value);
}
}
File ImageFile = new File(path);
try {
ImageIO.write(image, "jpg", ImageFile);
} catch (IOException e) {
e.printStackTrace();
}
但它返回错误的图像
答案 0 :(得分:0)
您可以更具体地了解您获得的结果吗?它有什么例外吗?或者程序正常完成但没有产生你想要的结果?
你应该注意到你想在这里使用二进制图像,那么选择JPG有什么特别的理由吗?据我所知,JPG不是彩色三重RGB的本机表示(例如bmp)。一个jpeg文件是一个&#34;容器&#34;数据序列,其标题(EXIF,QT,...)中有大量信息,由标记标记。直接处理像素值&#34;&#34;在你的数组中,jpg文件中的数据序列必须被解码&#34;然后在你播放图像之后,主图像数据将被编码&#34;再次成为jpg流。
要直接使用像素值,我建议您使用其他格式(例如TGA,png,...)