在我的程序中,我正在使用java读取图像,获取其字节数组并通过应用随机函数对其进行修改。现在在整个过程中维持了数组的大小,但是当我尝试使用字节数组构建图像时,获得了一个空图像。我尝试过使用java和opencv来重建图像(图像是440 * 442尺寸.png类型的灰度图像)。
opencv代码:
byte[] bytesArrayForImage=new byte[array.length];
for (int i=0; i<array.length; i++) {
bytesArrayForImage[i] = (byte) Integer.parseInt(array[i]);
}
Mat mat = new Mat(440,442, CvType.CV_8UC1);
mat.put(0,0, bytesArrayForImage);
String filename111 = Path;
Highgui.imwrite(filename111, mat);
java代码:
BufferedImage image=ImageIO.read(new ByteArrayInputStream(bytearray));
ImageIO.write(image, "png", new File(C:\\Users\\domin\\Desktop\\Sop\\,"modified.png"));
答案 0 :(得分:0)
如果您确定它是灰度,则可以使用它的光栅写入缓冲图像。
例如:
// opencv code for taking image data instead
byte[] bytesArrayForImage = new byte[194480];
Arrays.fill(bytesArrayForImage, (byte) 0x00);
BufferedImage image = new BufferedImage(440, 442, BufferedImage.TYPE_BYTE_GRAY);
DataBufferByte rasterData = (DataBufferByte) image.getRaster().getDataBuffer();
System.arraycopy(bytesArrayForImage, 0, rasterData.getData(), 0, 194480);
/*
Check your image with following
JFrame frame = new JFrame("test");
frame.setSize(440, 442);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add( new JLabel(new ImageIcon(image)) , BorderLayout.CENTER );
frame.setVisible(true);
*/