我有一个二维数组(只有 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();
}
但它返回错误的图像
最佳答案
您能更具体地说明您得到的结果吗?它抛出了一些异常吗?或者程序正常完成但没有产生您想要的结果?
您应该注意到,这里您想要使用二进制图像,那么选择 JPG 有什么具体原因吗?据我所知,JPG 不是颜色三元组 RGB 的原生表示(例如 bmp)。 jpeg文件是一个数据序列的“容器”,其中它的头部有很多信息(EXIF,QT,...),用标记来标记。要像在数组中一样“直接”处理像素值,必须对 jpg 文件中的数据序列进行“解码”,然后在播放图像后,主图像数据将再次“编码”为 jpg 流。
要直接使用像素值,我建议您使用其他格式(例如 TGA、png...)
关于java - 在Java中将二维数组转换为图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23201348/