如何用图像缓冲区填充原始文件,使用ImageIO.write的替代方案



问题是ImageIO.write不识别原始格式,因此文件不填充它。我用png尝试了相同的代码,它正确地创建了它。是否有一些替代ImageIO.write或其他方式来创建原始,原始字节文件? 对于Fid格式的图像是否有一些转换选择?

  • Fid Image to raw

  • 缓存图像为原始图像

在这里我创建了我指定地址的文件:

private void  RAWCompression(Fid.Fiv imagen) throws IOException{
JFileChooser fileChooser = new JFileChooser(System.getProperty("java.library.path"));
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setSelectedFile(new File("HuellaRaw.raw"));
fileChooser.showSaveDialog(null);
File dir = fileChooser.getSelectedFile();
File file = new File(dir.getAbsolutePath() + "/" + "HuellaRaw.raw");
System.out.println(file);
//Create file 
try {
file.createNewFile();
} catch (IOException ex) {
Logger.getLogger(Capture.class.getName()).log(Level.SEVERE, null, ex);
}  

我将图像发送给buferrtd:

BufferedImage imagenBuffered = new BufferedImage(imagen.getWidth(), imagen.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
imagenBuffered.getRaster().setDataElements(0, 0, imagen.getWidth(), imagen.getHeight(), imagen.getData());

我填充文件并将其转换为字节:

//convert BufferedImage to byte 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(imagenBuffered, "raw", baos);
byte[] bytes = baos.toByteArray();
//FileUtils.writeByteArrayToFile(file, bytes);
try (FileOutputStream os = new FileOutputStream(file)) {
os.write(bytes);
} catch (Exception e) {
System.err.print("imagen Error wri " + imagen.getImageData() + "n");
}

这一行不填充原始文件:
(如果我将raw更改为png,则它会填充文件)

ImageIO.write(imagenBuffered, "raw", baos);

这行png代码被正确创建:

ImageIO.write(imagenBuffered, "png", baos);

不能使用ImageIO来写raw。你可以得到"原始字节"你的图像,并把它们写入一个文件。

如果你已经有你的缓冲图像,你可以尝试这个答案的逆。https://stackoverflow.com/a/54578326/2067492

int[] rgb = imagenBuffered.getRGB(0, 0, width, height, null, width);
ByteBuffer bb = ByteBuffer.allocate( rgb.length*4 );
bb.asIntBuffer().put(rgb);
bytes = bb.array();

这将把所有像素写入一个字节[],没有标题或有关数据的信息,只有getRGB返回的4字节rgba。

相关内容

  • 没有找到相关文章