我从png图像获取int数组如何将其转换为bufferdimage或创建新的PNG文件?
int[] pixel = new int[w1*h1];
int i = 0;
for (int xx = 0; xx < h1; xx++) {
for (int yy = 0; yy < w1; yy++) {
pixel[i] = img.getRGB(yy, xx);
i++;
}
}
答案 0 :(得分:2)
如果你有一个打包RGB值的整数数组,这是将它保存到文件的java代码:
int width = 100;
int height = 100;
int[] rgbs = buildRaster(width, height);
DataBuffer rgbData = new DataBufferInt(rgbs, rgbs.length);
WritableRaster raster = Raster.createPackedRaster(rgbData, width, height, width,
new int[]{0xff0000, 0xff00, 0xff},
null);
ColorModel colorModel = new DirectColorModel(24, 0xff0000, 0xff00, 0xff);
BufferedImage img = new BufferedImage(colorModel, raster, false, null);
String fname = "/tmp/whatI.png";
ImageIO.write(img, "png", new File(fname));
System.out.println("wrote to "+fname);
数组0xff0000, 0xff00, 0xff
的原因是RGB字节在最低有效字节中用蓝色打包。如果打包不同,请更改该数组。
答案 1 :(得分:1)
您可以手动重建图像,但这是一项相当昂贵的操作。
BufferedImage image = new BufferedImage(64, 64, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
for(int i = 0; i < pixels.size(); i++)
{
g.setColor(new java.awt.Color(pixels.get(i).getRed(), pixels.get(i).getGreen(), pixels.get(i).getBlue()));
g.fillRect(pixels.get(i).getxPos(), pixels.get(i).getyPos(), 1, 1);
}
try
{
ImageIO.write(image, "PNG", new File("imageName.png"))
}
catch(IOException error)
{
error.printStackTrace();
}
我将你的图像数组格式化为一个对象,这是个人偏好(当然你也可以使用这个模型的int数组)。请记住,您也可以随时添加alpha。
答案 2 :(得分:0)
尝试ImageIO类,它可以使用表示像素数据的字节数组来构建图像对象,然后以特定格式写出来。
try {
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(yourBytes));
ImageIO.write(bufferedImage, "png", new File("out.png"));
} catch (IOException e) {
e.printStackTrace();
}