我必须读取由 6 个图像压缩的 tiff 图像,并将图像分成 6 个不同的 tiff 文件。为了识别不同的图像,我从 xml 文件中获取了这样的偏移值。
First image :data_offset :0
data_length :7827
Second Image: data_offset :7827
data_length :9624
Third Image: data_offset :17451 ( i.e 7827+9624)
data_length :5713
Fourth Image: data_offset :23164 (7827+9624+5713)
data_length :9624
......对于所有 6 张图像也是如此。
我有单个图像的偏移量和长度。如何根据偏移量和长度将原始 tiff 文件拆分为不同的 tiff 图像。
我在下面使用的代码是读取原始 tiff 文件并处理同一个文件。输出是具有单个图像的 tiff 文件。
public class TiffImageReader {
public static void main(String[] args) throws FileNotFoundException, IOException {
File file = new File("C://DS.tiff");
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1; ) {
//Writes to this byte array output stream
bos.write(buf, 0, readNum);
System.out.println("read " + readNum + " bytes,");
}
}
catch (IOException ex) {
Logger.getLogger(ConvertImage.class.getName()).log(Level.SEVERE, null, ex);
}
byte[] bytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
Iterator<?> readers = ImageIO.getImageReadersByFormatName("tiff");
ImageReader reader = (ImageReader) readers.next();
Object source = bis;
ImageInputStream iis = ImageIO.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Image image = reader.read(0, param);
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, null, null);
File imageFile = new File("C:// DSCOPY.tiff");
ImageIO.write(bufferedImage, "tiff", imageFile);
System.out.println(imageFile.getPath());
}
}
如果我将字节设为 1 并在第一个偏移量 7827 处进行 echeck 并尝试写入图像 ..它显示 ArrayOutofIndex ..
"for (int readNum; (readNum = fis.read(buf)) !== 7827;)"
如何使用偏移量和长度来分割我的文件?
请帮忙。