问题是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。