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;)"
オフセットと長さを使用してファイルを分割する方法は?
助けてください。