1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.imaging.formats.tiff.write;
18
19 import java.nio.ByteOrder;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.apache.commons.imaging.ImagingException;
25 import org.apache.commons.imaging.formats.tiff.fieldtypes.AbstractFieldType;
26
27 final class TiffOutputSummary {
28 private static final class OffsetItem {
29 public final AbstractTiffOutputItem item;
30 public final TiffOutputField itemOffsetField;
31
32 OffsetItem(final AbstractTiffOutputItem item, final TiffOutputField itemOffsetField) {
33 this.itemOffsetField = itemOffsetField;
34 this.item = item;
35 }
36 }
37
38 public final ByteOrder byteOrder;
39 public final TiffOutputDirectory rootDirectory;
40 public final Map<Integer, TiffOutputDirectory> directoryTypeMap;
41 private final List<OffsetItem> offsetItems = new ArrayList<>();
42
43 private final List<ImageDataOffsets> imageDataItems = new ArrayList<>();
44
45 TiffOutputSummary(final ByteOrder byteOrder, final TiffOutputDirectory rootDirectory, final Map<Integer, TiffOutputDirectory> directoryTypeMap) {
46 this.byteOrder = byteOrder;
47 this.rootDirectory = rootDirectory;
48 this.directoryTypeMap = directoryTypeMap;
49 }
50
51 public void add(final AbstractTiffOutputItem item, final TiffOutputField itemOffsetField) {
52 offsetItems.add(new OffsetItem(item, itemOffsetField));
53 }
54
55 public void addTiffImageData(final ImageDataOffsets imageDataInfo) {
56 imageDataItems.add(imageDataInfo);
57 }
58
59 public void updateOffsets(final ByteOrder byteOrder) throws ImagingException {
60 for (final OffsetItem offset : offsetItems) {
61 final byte[] value = AbstractFieldType.LONG.writeData((int) offset.item.getOffset(), byteOrder);
62 offset.itemOffsetField.setData(value);
63 }
64
65 for (final ImageDataOffsets imageDataInfo : imageDataItems) {
66 for (int j = 0; j < imageDataInfo.outputItems.length; j++) {
67 final AbstractTiffOutputItem item = imageDataInfo.outputItems[j];
68 imageDataInfo.imageDataOffsets[j] = (int) item.getOffset();
69 }
70
71 imageDataInfo.imageDataOffsetsField.setData(AbstractFieldType.LONG.writeData(imageDataInfo.imageDataOffsets, byteOrder));
72 }
73 }
74
75 }