author | bpb |
Fri, 09 Dec 2016 11:08:38 -0800 | |
changeset 42742 | 60484cf11911 |
parent 40442 | e97e9982be6d |
child 42749 | 91fb907a8732 |
permissions | -rw-r--r-- |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1 |
/* |
36448
a07e108d5722
8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents:
34416
diff
changeset
|
2 |
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
4 |
* |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. Oracle designates this |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
10 |
* |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
15 |
* accompanied this code). |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
16 |
* |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
20 |
* |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
22 |
* or visit www.oracle.com if you need additional information or have any |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
23 |
* questions. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
24 |
*/ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
25 |
package com.sun.imageio.plugins.tiff; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
26 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
27 |
import java.io.IOException; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
28 |
import java.lang.reflect.InvocationTargetException; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
29 |
import java.lang.reflect.Method; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
30 |
import java.util.ArrayList; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
31 |
import java.util.Arrays; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
32 |
import java.util.HashMap; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
33 |
import java.util.Iterator; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
34 |
import java.util.List; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
35 |
import java.util.Map; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
36 |
import java.util.StringTokenizer; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
37 |
import javax.imageio.metadata.IIOMetadata; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
38 |
import javax.imageio.metadata.IIOInvalidTreeException; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
39 |
import javax.imageio.metadata.IIOMetadataFormatImpl; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
40 |
import javax.imageio.metadata.IIOMetadataNode; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
41 |
import javax.imageio.stream.ImageInputStream; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
42 |
import org.w3c.dom.NamedNodeMap; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
43 |
import org.w3c.dom.Node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
44 |
import org.w3c.dom.NodeList; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
45 |
import javax.imageio.plugins.tiff.BaselineTIFFTagSet; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
46 |
import javax.imageio.plugins.tiff.ExifParentTIFFTagSet; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
47 |
import javax.imageio.plugins.tiff.TIFFField; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
48 |
import javax.imageio.plugins.tiff.TIFFTag; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
49 |
import javax.imageio.plugins.tiff.TIFFTagSet; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
50 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
51 |
public class TIFFImageMetadata extends IIOMetadata { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
52 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
53 |
// package scope |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
54 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
55 |
public static final String NATIVE_METADATA_FORMAT_NAME = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
56 |
"javax_imageio_tiff_image_1.0"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
57 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
58 |
public static final String NATIVE_METADATA_FORMAT_CLASS_NAME = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
59 |
"javax.imageio.plugins.tiff.TIFFImageMetadataFormat"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
60 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
61 |
private List<TIFFTagSet> tagSets; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
62 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
63 |
TIFFIFD rootIFD; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
64 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
65 |
public TIFFImageMetadata(List<TIFFTagSet> tagSets) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
66 |
super(true, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
67 |
NATIVE_METADATA_FORMAT_NAME, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
68 |
NATIVE_METADATA_FORMAT_CLASS_NAME, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
69 |
null, null); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
70 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
71 |
this.tagSets = tagSets; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
72 |
this.rootIFD = new TIFFIFD(tagSets); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
73 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
74 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
75 |
public TIFFImageMetadata(TIFFIFD ifd) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
76 |
super(true, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
77 |
NATIVE_METADATA_FORMAT_NAME, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
78 |
NATIVE_METADATA_FORMAT_CLASS_NAME, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
79 |
null, null); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
80 |
this.tagSets = ifd.getTagSetList(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
81 |
this.rootIFD = ifd; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
82 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
83 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
84 |
public void initializeFromStream(ImageInputStream stream, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
85 |
boolean ignoreUnknownFields) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
86 |
throws IOException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
87 |
rootIFD.initialize(stream, true, ignoreUnknownFields); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
88 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
89 |
|
42742
60484cf11911
8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents:
40442
diff
changeset
|
90 |
public void addShortOrLongField(int tagNumber, long value) { |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
91 |
TIFFField field = new TIFFField(rootIFD.getTag(tagNumber), value); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
92 |
rootIFD.addTIFFField(field); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
93 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
94 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
95 |
public boolean isReadOnly() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
96 |
return false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
97 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
98 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
99 |
private Node getIFDAsTree(TIFFIFD ifd, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
100 |
String parentTagName, int parentTagNumber) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
101 |
IIOMetadataNode IFDRoot = new IIOMetadataNode("TIFFIFD"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
102 |
if (parentTagNumber != 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
103 |
IFDRoot.setAttribute("parentTagNumber", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
104 |
Integer.toString(parentTagNumber)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
105 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
106 |
if (parentTagName != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
107 |
IFDRoot.setAttribute("parentTagName", parentTagName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
108 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
109 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
110 |
List<TIFFTagSet> tagSets = ifd.getTagSetList(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
111 |
if (tagSets.size() > 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
112 |
Iterator<TIFFTagSet> iter = tagSets.iterator(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
113 |
StringBuilder tagSetNames = new StringBuilder(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
114 |
while (iter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
115 |
TIFFTagSet tagSet = iter.next(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
116 |
tagSetNames.append(tagSet.getClass().getName()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
117 |
if (iter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
118 |
tagSetNames.append(","); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
119 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
120 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
121 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
122 |
IFDRoot.setAttribute("tagSets", tagSetNames.toString()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
123 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
124 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
125 |
Iterator<TIFFField> iter = ifd.iterator(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
126 |
while (iter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
127 |
TIFFField f = iter.next(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
128 |
int tagNumber = f.getTagNumber(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
129 |
TIFFTag tag = TIFFIFD.getTag(tagNumber, tagSets); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
130 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
131 |
Node node = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
132 |
if (tag == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
133 |
node = f.getAsNativeNode(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
134 |
} else if (tag.isIFDPointer() && f.hasDirectory()) { |
40442
e97e9982be6d
8152966: ClassCastException when adding IFD to the TIFFDirectory before the image write
bpb
parents:
40433
diff
changeset
|
135 |
TIFFIFD subIFD = TIFFIFD.getDirectoryAsIFD(f.getDirectory()); |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
136 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
137 |
// Recurse |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
138 |
node = getIFDAsTree(subIFD, tag.getName(), tag.getNumber()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
139 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
140 |
node = f.getAsNativeNode(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
141 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
142 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
143 |
if (node != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
144 |
IFDRoot.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
145 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
146 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
147 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
148 |
return IFDRoot; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
149 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
150 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
151 |
public Node getAsTree(String formatName) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
152 |
if (formatName.equals(nativeMetadataFormatName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
153 |
return getNativeTree(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
154 |
} else if (formatName.equals |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
155 |
(IIOMetadataFormatImpl.standardMetadataFormatName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
156 |
return getStandardTree(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
157 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
158 |
throw new IllegalArgumentException("Not a recognized format!"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
159 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
160 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
161 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
162 |
private Node getNativeTree() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
163 |
IIOMetadataNode root = new IIOMetadataNode(nativeMetadataFormatName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
164 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
165 |
Node IFDNode = getIFDAsTree(rootIFD, null, 0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
166 |
root.appendChild(IFDNode); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
167 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
168 |
return root; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
169 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
170 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
171 |
private static final String[] colorSpaceNames = { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
172 |
"GRAY", // WhiteIsZero |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
173 |
"GRAY", // BlackIsZero |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
174 |
"RGB", // RGB |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
175 |
"RGB", // PaletteColor |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
176 |
"GRAY", // TransparencyMask |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
177 |
"CMYK", // CMYK |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
178 |
"YCbCr", // YCbCr |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
179 |
"Lab", // CIELab |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
180 |
"Lab", // ICCLab |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
181 |
}; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
182 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
183 |
public IIOMetadataNode getStandardChromaNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
184 |
IIOMetadataNode chroma_node = new IIOMetadataNode("Chroma"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
185 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
186 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
187 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
188 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
189 |
// Set the PhotometricInterpretation and the palette color flag. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
190 |
int photometricInterpretation = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
191 |
boolean isPaletteColor = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
192 |
f = getTIFFField(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
193 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
194 |
photometricInterpretation = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
195 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
196 |
isPaletteColor = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
197 |
photometricInterpretation == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
198 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_PALETTE_COLOR; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
199 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
200 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
201 |
// Determine the number of channels. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
202 |
int numChannels = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
203 |
if(isPaletteColor) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
204 |
numChannels = 3; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
205 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
206 |
f = getTIFFField(BaselineTIFFTagSet.TAG_SAMPLES_PER_PIXEL); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
207 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
208 |
numChannels = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
209 |
} else { // f == null |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
210 |
f = getTIFFField(BaselineTIFFTagSet.TAG_BITS_PER_SAMPLE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
211 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
212 |
numChannels = f.getCount(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
213 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
214 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
215 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
216 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
217 |
if(photometricInterpretation != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
218 |
if (photometricInterpretation >= 0 && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
219 |
photometricInterpretation < colorSpaceNames.length) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
220 |
node = new IIOMetadataNode("ColorSpaceType"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
221 |
String csName; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
222 |
if(photometricInterpretation == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
223 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_CMYK && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
224 |
numChannels == 3) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
225 |
csName = "CMY"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
226 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
227 |
csName = colorSpaceNames[photometricInterpretation]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
228 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
229 |
node.setAttribute("name", csName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
230 |
chroma_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
231 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
232 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
233 |
node = new IIOMetadataNode("BlackIsZero"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
234 |
node.setAttribute("value", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
235 |
(photometricInterpretation == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
236 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
237 |
? "FALSE" : "TRUE"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
238 |
chroma_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
239 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
240 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
241 |
if(numChannels != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
242 |
node = new IIOMetadataNode("NumChannels"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
243 |
node.setAttribute("value", Integer.toString(numChannels)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
244 |
chroma_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
245 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
246 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
247 |
f = getTIFFField(BaselineTIFFTagSet.TAG_COLOR_MAP); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
248 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
249 |
// NOTE: The presence of hasAlpha is vestigial: there is |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
250 |
// no way in TIFF to represent an alpha component in a palette |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
251 |
// color image. See bug 5086341. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
252 |
boolean hasAlpha = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
253 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
254 |
node = new IIOMetadataNode("Palette"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
255 |
int len = f.getCount()/(hasAlpha ? 4 : 3); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
256 |
for (int i = 0; i < len; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
257 |
IIOMetadataNode entry = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
258 |
new IIOMetadataNode("PaletteEntry"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
259 |
entry.setAttribute("index", Integer.toString(i)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
260 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
261 |
int r = (f.getAsInt(i)*255)/65535; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
262 |
int g = (f.getAsInt(len + i)*255)/65535; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
263 |
int b = (f.getAsInt(2*len + i)*255)/65535; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
264 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
265 |
entry.setAttribute("red", Integer.toString(r)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
266 |
entry.setAttribute("green", Integer.toString(g)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
267 |
entry.setAttribute("blue", Integer.toString(b)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
268 |
if (hasAlpha) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
269 |
int alpha = 0; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
270 |
entry.setAttribute("alpha", Integer.toString(alpha)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
271 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
272 |
node.appendChild(entry); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
273 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
274 |
chroma_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
275 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
276 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
277 |
return chroma_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
278 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
279 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
280 |
public IIOMetadataNode getStandardCompressionNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
281 |
IIOMetadataNode compression_node = new IIOMetadataNode("Compression"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
282 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
283 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
284 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
285 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
286 |
f = getTIFFField(BaselineTIFFTagSet.TAG_COMPRESSION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
287 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
288 |
String compressionTypeName = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
289 |
int compression = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
290 |
boolean isLossless = true; // obligate initialization. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
291 |
if(compression == BaselineTIFFTagSet.COMPRESSION_NONE) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
292 |
compressionTypeName = "None"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
293 |
isLossless = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
294 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
295 |
int[] compressionNumbers = TIFFImageWriter.compressionNumbers; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
296 |
for(int i = 0; i < compressionNumbers.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
297 |
if(compression == compressionNumbers[i]) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
298 |
compressionTypeName = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
299 |
TIFFImageWriter.compressionTypes[i]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
300 |
isLossless = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
301 |
TIFFImageWriter.isCompressionLossless[i]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
302 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
303 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
304 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
305 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
306 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
307 |
if (compressionTypeName != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
308 |
node = new IIOMetadataNode("CompressionTypeName"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
309 |
node.setAttribute("value", compressionTypeName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
310 |
compression_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
311 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
312 |
node = new IIOMetadataNode("Lossless"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
313 |
node.setAttribute("value", isLossless ? "TRUE" : "FALSE"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
314 |
compression_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
315 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
316 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
317 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
318 |
node = new IIOMetadataNode("NumProgressiveScans"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
319 |
node.setAttribute("value", "1"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
320 |
compression_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
321 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
322 |
return compression_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
323 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
324 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
325 |
private String repeat(String s, int times) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
326 |
if (times == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
327 |
return s; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
328 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
329 |
StringBuffer sb = new StringBuffer((s.length() + 1)*times - 1); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
330 |
sb.append(s); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
331 |
for (int i = 1; i < times; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
332 |
sb.append(" "); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
333 |
sb.append(s); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
334 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
335 |
return sb.toString(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
336 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
337 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
338 |
public IIOMetadataNode getStandardDataNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
339 |
IIOMetadataNode data_node = new IIOMetadataNode("Data"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
340 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
341 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
342 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
343 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
344 |
boolean isPaletteColor = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
345 |
f = getTIFFField(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
346 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
347 |
isPaletteColor = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
348 |
f.getAsInt(0) == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
349 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_PALETTE_COLOR; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
350 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
351 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
352 |
f = getTIFFField(BaselineTIFFTagSet.TAG_PLANAR_CONFIGURATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
353 |
String planarConfiguration = "PixelInterleaved"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
354 |
if (f != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
355 |
f.getAsInt(0) == BaselineTIFFTagSet.PLANAR_CONFIGURATION_PLANAR) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
356 |
planarConfiguration = "PlaneInterleaved"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
357 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
358 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
359 |
node = new IIOMetadataNode("PlanarConfiguration"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
360 |
node.setAttribute("value", planarConfiguration); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
361 |
data_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
362 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
363 |
f = getTIFFField(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
364 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
365 |
int photometricInterpretation = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
366 |
String sampleFormat = "UnsignedIntegral"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
367 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
368 |
if (photometricInterpretation == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
369 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_PALETTE_COLOR) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
370 |
sampleFormat = "Index"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
371 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
372 |
f = getTIFFField(BaselineTIFFTagSet.TAG_SAMPLE_FORMAT); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
373 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
374 |
int format = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
375 |
if (format == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
376 |
BaselineTIFFTagSet.SAMPLE_FORMAT_SIGNED_INTEGER) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
377 |
sampleFormat = "SignedIntegral"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
378 |
} else if (format == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
379 |
BaselineTIFFTagSet.SAMPLE_FORMAT_UNSIGNED_INTEGER) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
380 |
sampleFormat = "UnsignedIntegral"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
381 |
} else if (format == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
382 |
BaselineTIFFTagSet.SAMPLE_FORMAT_FLOATING_POINT) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
383 |
sampleFormat = "Real"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
384 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
385 |
sampleFormat = null; // don't know |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
386 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
387 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
388 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
389 |
if (sampleFormat != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
390 |
node = new IIOMetadataNode("SampleFormat"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
391 |
node.setAttribute("value", sampleFormat); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
392 |
data_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
393 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
394 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
395 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
396 |
f = getTIFFField(BaselineTIFFTagSet.TAG_BITS_PER_SAMPLE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
397 |
int[] bitsPerSample = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
398 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
399 |
bitsPerSample = f.getAsInts(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
400 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
401 |
f = getTIFFField(BaselineTIFFTagSet.TAG_COMPRESSION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
402 |
int compression = f != null ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
403 |
f.getAsInt(0) : BaselineTIFFTagSet.COMPRESSION_NONE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
404 |
if(getTIFFField(ExifParentTIFFTagSet.TAG_EXIF_IFD_POINTER) != |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
405 |
null || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
406 |
compression == BaselineTIFFTagSet.COMPRESSION_JPEG || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
407 |
compression == BaselineTIFFTagSet.COMPRESSION_OLD_JPEG || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
408 |
getTIFFField(BaselineTIFFTagSet.TAG_JPEG_INTERCHANGE_FORMAT) != |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
409 |
null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
410 |
f = getTIFFField(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
411 |
if(f != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
412 |
(f.getAsInt(0) == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
413 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
414 |
f.getAsInt(0) == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
415 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
416 |
bitsPerSample = new int[] {8}; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
417 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
418 |
bitsPerSample = new int[] {8, 8, 8}; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
419 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
420 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
421 |
bitsPerSample = new int[] {1}; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
422 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
423 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
424 |
StringBuffer sb = new StringBuffer(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
425 |
for (int i = 0; i < bitsPerSample.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
426 |
if (i > 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
427 |
sb.append(" "); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
428 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
429 |
sb.append(Integer.toString(bitsPerSample[i])); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
430 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
431 |
node = new IIOMetadataNode("BitsPerSample"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
432 |
if(isPaletteColor) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
433 |
node.setAttribute("value", repeat(sb.toString(), 3)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
434 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
435 |
node.setAttribute("value", sb.toString()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
436 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
437 |
data_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
438 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
439 |
// SampleMSB |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
440 |
f = getTIFFField(BaselineTIFFTagSet.TAG_FILL_ORDER); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
441 |
int fillOrder = f != null ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
442 |
f.getAsInt(0) : BaselineTIFFTagSet.FILL_ORDER_LEFT_TO_RIGHT; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
443 |
sb = new StringBuffer(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
444 |
for (int i = 0; i < bitsPerSample.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
445 |
if (i > 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
446 |
sb.append(" "); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
447 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
448 |
int maxBitIndex = bitsPerSample[i] == 1 ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
449 |
7 : bitsPerSample[i] - 1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
450 |
int msb = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
451 |
fillOrder == BaselineTIFFTagSet.FILL_ORDER_LEFT_TO_RIGHT ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
452 |
maxBitIndex : 0; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
453 |
sb.append(Integer.toString(msb)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
454 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
455 |
node = new IIOMetadataNode("SampleMSB"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
456 |
if(isPaletteColor) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
457 |
node.setAttribute("value", repeat(sb.toString(), 3)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
458 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
459 |
node.setAttribute("value", sb.toString()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
460 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
461 |
data_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
462 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
463 |
return data_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
464 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
465 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
466 |
private static final String[] orientationNames = { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
467 |
null, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
468 |
"Normal", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
469 |
"FlipH", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
470 |
"Rotate180", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
471 |
"FlipV", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
472 |
"FlipHRotate90", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
473 |
"Rotate270", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
474 |
"FlipVRotate90", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
475 |
"Rotate90", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
476 |
}; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
477 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
478 |
public IIOMetadataNode getStandardDimensionNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
479 |
IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
480 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
481 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
482 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
483 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
484 |
long[] xres = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
485 |
long[] yres = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
486 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
487 |
f = getTIFFField(BaselineTIFFTagSet.TAG_X_RESOLUTION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
488 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
489 |
xres = f.getAsRational(0).clone(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
490 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
491 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
492 |
f = getTIFFField(BaselineTIFFTagSet.TAG_Y_RESOLUTION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
493 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
494 |
yres = f.getAsRational(0).clone(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
495 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
496 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
497 |
if (xres != null && yres != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
498 |
node = new IIOMetadataNode("PixelAspectRatio"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
499 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
500 |
// Compute (1/xres)/(1/yres) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
501 |
// (xres_denom/xres_num)/(yres_denom/yres_num) = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
502 |
// (xres_denom/xres_num)*(yres_num/yres_denom) = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
503 |
// (xres_denom*yres_num)/(xres_num*yres_denom) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
504 |
float ratio = (float)((double)xres[1]*yres[0])/(xres[0]*yres[1]); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
505 |
node.setAttribute("value", Float.toString(ratio)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
506 |
dimension_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
507 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
508 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
509 |
if (xres != null || yres != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
510 |
// Get unit field. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
511 |
f = getTIFFField(BaselineTIFFTagSet.TAG_RESOLUTION_UNIT); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
512 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
513 |
// Set resolution unit. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
514 |
int resolutionUnit = f != null ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
515 |
f.getAsInt(0) : BaselineTIFFTagSet.RESOLUTION_UNIT_INCH; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
516 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
517 |
// Have size if either centimeters or inches. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
518 |
boolean gotPixelSize = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
519 |
resolutionUnit != BaselineTIFFTagSet.RESOLUTION_UNIT_NONE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
520 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
521 |
// Convert pixels/inch to pixels/centimeter. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
522 |
if (resolutionUnit == BaselineTIFFTagSet.RESOLUTION_UNIT_INCH) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
523 |
// Divide xres by 2.54 |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
524 |
if (xres != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
525 |
xres[0] *= 100; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
526 |
xres[1] *= 254; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
527 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
528 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
529 |
// Divide yres by 2.54 |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
530 |
if (yres != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
531 |
yres[0] *= 100; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
532 |
yres[1] *= 254; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
533 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
534 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
535 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
536 |
if (gotPixelSize) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
537 |
if (xres != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
538 |
float horizontalPixelSize = (float)(10.0*xres[1]/xres[0]); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
539 |
node = new IIOMetadataNode("HorizontalPixelSize"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
540 |
node.setAttribute("value", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
541 |
Float.toString(horizontalPixelSize)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
542 |
dimension_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
543 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
544 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
545 |
if (yres != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
546 |
float verticalPixelSize = (float)(10.0*yres[1]/yres[0]); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
547 |
node = new IIOMetadataNode("VerticalPixelSize"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
548 |
node.setAttribute("value", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
549 |
Float.toString(verticalPixelSize)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
550 |
dimension_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
551 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
552 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
553 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
554 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
555 |
f = getTIFFField(BaselineTIFFTagSet.TAG_RESOLUTION_UNIT); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
556 |
int resolutionUnit = f != null ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
557 |
f.getAsInt(0) : BaselineTIFFTagSet.RESOLUTION_UNIT_INCH; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
558 |
if(resolutionUnit == BaselineTIFFTagSet.RESOLUTION_UNIT_INCH || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
559 |
resolutionUnit == BaselineTIFFTagSet.RESOLUTION_UNIT_CENTIMETER) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
560 |
f = getTIFFField(BaselineTIFFTagSet.TAG_X_POSITION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
561 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
562 |
long[] xpos = f.getAsRational(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
563 |
float xPosition = (float)xpos[0]/(float)xpos[1]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
564 |
// Convert to millimeters. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
565 |
if(resolutionUnit == BaselineTIFFTagSet.RESOLUTION_UNIT_INCH) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
566 |
xPosition *= 254F; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
567 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
568 |
xPosition *= 10F; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
569 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
570 |
node = new IIOMetadataNode("HorizontalPosition"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
571 |
node.setAttribute("value", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
572 |
Float.toString(xPosition)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
573 |
dimension_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
574 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
575 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
576 |
f = getTIFFField(BaselineTIFFTagSet.TAG_Y_POSITION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
577 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
578 |
long[] ypos = f.getAsRational(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
579 |
float yPosition = (float)ypos[0]/(float)ypos[1]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
580 |
// Convert to millimeters. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
581 |
if(resolutionUnit == BaselineTIFFTagSet.RESOLUTION_UNIT_INCH) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
582 |
yPosition *= 254F; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
583 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
584 |
yPosition *= 10F; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
585 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
586 |
node = new IIOMetadataNode("VerticalPosition"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
587 |
node.setAttribute("value", |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
588 |
Float.toString(yPosition)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
589 |
dimension_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
590 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
591 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
592 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
593 |
f = getTIFFField(BaselineTIFFTagSet.TAG_ORIENTATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
594 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
595 |
int o = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
596 |
if (o >= 0 && o < orientationNames.length) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
597 |
node = new IIOMetadataNode("ImageOrientation"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
598 |
node.setAttribute("value", orientationNames[o]); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
599 |
dimension_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
600 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
601 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
602 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
603 |
return dimension_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
604 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
605 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
606 |
public IIOMetadataNode getStandardDocumentNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
607 |
IIOMetadataNode document_node = new IIOMetadataNode("Document"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
608 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
609 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
610 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
611 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
612 |
node = new IIOMetadataNode("FormatVersion"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
613 |
node.setAttribute("value", "6.0"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
614 |
document_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
615 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
616 |
f = getTIFFField(BaselineTIFFTagSet.TAG_NEW_SUBFILE_TYPE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
617 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
618 |
int newSubFileType = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
619 |
String value = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
620 |
if((newSubFileType & |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
621 |
BaselineTIFFTagSet.NEW_SUBFILE_TYPE_TRANSPARENCY) != 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
622 |
value = "TransparencyMask"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
623 |
} else if((newSubFileType & |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
624 |
BaselineTIFFTagSet.NEW_SUBFILE_TYPE_REDUCED_RESOLUTION) != 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
625 |
value = "ReducedResolution"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
626 |
} else if((newSubFileType & |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
627 |
BaselineTIFFTagSet.NEW_SUBFILE_TYPE_SINGLE_PAGE) != 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
628 |
value = "SinglePage"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
629 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
630 |
if(value != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
631 |
node = new IIOMetadataNode("SubimageInterpretation"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
632 |
node.setAttribute("value", value); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
633 |
document_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
634 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
635 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
636 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
637 |
f = getTIFFField(BaselineTIFFTagSet.TAG_DATE_TIME); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
638 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
639 |
String s = f.getAsString(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
640 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
641 |
// DateTime should be formatted as "YYYY:MM:DD hh:mm:ss". |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
642 |
if(s.length() == 19) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
643 |
node = new IIOMetadataNode("ImageCreationTime"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
644 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
645 |
// Files with incorrect DateTime format have been |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
646 |
// observed so anticipate an exception from substring() |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
647 |
// and only add the node if the format is presumably |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
648 |
// correct. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
649 |
boolean appendNode; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
650 |
try { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
651 |
node.setAttribute("year", s.substring(0, 4)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
652 |
node.setAttribute("month", s.substring(5, 7)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
653 |
node.setAttribute("day", s.substring(8, 10)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
654 |
node.setAttribute("hour", s.substring(11, 13)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
655 |
node.setAttribute("minute", s.substring(14, 16)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
656 |
node.setAttribute("second", s.substring(17, 19)); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
657 |
appendNode = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
658 |
} catch(IndexOutOfBoundsException e) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
659 |
appendNode = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
660 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
661 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
662 |
if(appendNode) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
663 |
document_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
664 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
665 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
666 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
667 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
668 |
return document_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
669 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
670 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
671 |
public IIOMetadataNode getStandardTextNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
672 |
IIOMetadataNode text_node = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
673 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
674 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
675 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
676 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
677 |
int[] textFieldTagNumbers = new int[] { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
678 |
BaselineTIFFTagSet.TAG_DOCUMENT_NAME, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
679 |
BaselineTIFFTagSet.TAG_IMAGE_DESCRIPTION, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
680 |
BaselineTIFFTagSet.TAG_MAKE, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
681 |
BaselineTIFFTagSet.TAG_MODEL, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
682 |
BaselineTIFFTagSet.TAG_PAGE_NAME, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
683 |
BaselineTIFFTagSet.TAG_SOFTWARE, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
684 |
BaselineTIFFTagSet.TAG_ARTIST, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
685 |
BaselineTIFFTagSet.TAG_HOST_COMPUTER, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
686 |
BaselineTIFFTagSet.TAG_INK_NAMES, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
687 |
BaselineTIFFTagSet.TAG_COPYRIGHT |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
688 |
}; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
689 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
690 |
for(int i = 0; i < textFieldTagNumbers.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
691 |
f = getTIFFField(textFieldTagNumbers[i]); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
692 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
693 |
String value = f.getAsString(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
694 |
if(text_node == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
695 |
text_node = new IIOMetadataNode("Text"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
696 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
697 |
node = new IIOMetadataNode("TextEntry"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
698 |
node.setAttribute("keyword", f.getTag().getName()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
699 |
node.setAttribute("value", value); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
700 |
text_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
701 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
702 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
703 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
704 |
return text_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
705 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
706 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
707 |
public IIOMetadataNode getStandardTransparencyNode() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
708 |
IIOMetadataNode transparency_node = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
709 |
new IIOMetadataNode("Transparency"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
710 |
IIOMetadataNode node = null; // scratch node |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
711 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
712 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
713 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
714 |
node = new IIOMetadataNode("Alpha"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
715 |
String value = "none"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
716 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
717 |
f = getTIFFField(BaselineTIFFTagSet.TAG_EXTRA_SAMPLES); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
718 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
719 |
int[] extraSamples = f.getAsInts(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
720 |
for(int i = 0; i < extraSamples.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
721 |
if(extraSamples[i] == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
722 |
BaselineTIFFTagSet.EXTRA_SAMPLES_ASSOCIATED_ALPHA) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
723 |
value = "premultiplied"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
724 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
725 |
} else if(extraSamples[i] == |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
726 |
BaselineTIFFTagSet.EXTRA_SAMPLES_UNASSOCIATED_ALPHA) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
727 |
value = "nonpremultiplied"; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
728 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
729 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
730 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
731 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
732 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
733 |
node.setAttribute("value", value); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
734 |
transparency_node.appendChild(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
735 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
736 |
return transparency_node; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
737 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
738 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
739 |
// Shorthand for throwing an IIOInvalidTreeException |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
740 |
private static void fatal(Node node, String reason) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
741 |
throws IIOInvalidTreeException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
742 |
throw new IIOInvalidTreeException(reason, node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
743 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
744 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
745 |
private int[] listToIntArray(String list) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
746 |
StringTokenizer st = new StringTokenizer(list, " "); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
747 |
ArrayList<Integer> intList = new ArrayList<Integer>(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
748 |
while (st.hasMoreTokens()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
749 |
String nextInteger = st.nextToken(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
750 |
Integer nextInt = Integer.valueOf(nextInteger); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
751 |
intList.add(nextInt); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
752 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
753 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
754 |
int[] intArray = new int[intList.size()]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
755 |
for(int i = 0; i < intArray.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
756 |
intArray[i] = intList.get(i); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
757 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
758 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
759 |
return intArray; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
760 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
761 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
762 |
private char[] listToCharArray(String list) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
763 |
StringTokenizer st = new StringTokenizer(list, " "); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
764 |
ArrayList<Integer> intList = new ArrayList<Integer>(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
765 |
while (st.hasMoreTokens()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
766 |
String nextInteger = st.nextToken(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
767 |
Integer nextInt = Integer.valueOf(nextInteger); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
768 |
intList.add(nextInt); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
769 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
770 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
771 |
char[] charArray = new char[intList.size()]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
772 |
for(int i = 0; i < charArray.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
773 |
charArray[i] = (char)(intList.get(i).intValue()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
774 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
775 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
776 |
return charArray; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
777 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
778 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
779 |
private void mergeStandardTree(Node root) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
780 |
throws IIOInvalidTreeException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
781 |
TIFFField f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
782 |
TIFFTag tag; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
783 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
784 |
Node node = root; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
785 |
if (!node.getNodeName() |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
786 |
.equals(IIOMetadataFormatImpl.standardMetadataFormatName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
787 |
fatal(node, "Root must be " + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
788 |
IIOMetadataFormatImpl.standardMetadataFormatName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
789 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
790 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
791 |
// Obtain the sample format and set the palette flag if appropriate. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
792 |
String sampleFormat = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
793 |
Node dataNode = getChildNode(root, "Data"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
794 |
boolean isPaletteColor = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
795 |
if(dataNode != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
796 |
Node sampleFormatNode = getChildNode(dataNode, "SampleFormat"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
797 |
if(sampleFormatNode != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
798 |
sampleFormat = getAttribute(sampleFormatNode, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
799 |
isPaletteColor = sampleFormat.equals("Index"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
800 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
801 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
802 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
803 |
// If palette flag not set check for palette. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
804 |
if(!isPaletteColor) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
805 |
Node chromaNode = getChildNode(root, "Chroma"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
806 |
if(chromaNode != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
807 |
getChildNode(chromaNode, "Palette") != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
808 |
isPaletteColor = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
809 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
810 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
811 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
812 |
node = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
813 |
while (node != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
814 |
String name = node.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
815 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
816 |
if (name.equals("Chroma")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
817 |
String colorSpaceType = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
818 |
String blackIsZero = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
819 |
boolean gotPalette = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
820 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
821 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
822 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
823 |
if (childName.equals("ColorSpaceType")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
824 |
colorSpaceType = getAttribute(child, "name"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
825 |
} else if (childName.equals("NumChannels")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
826 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_SAMPLES_PER_PIXEL); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
827 |
int samplesPerPixel = isPaletteColor ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
828 |
1 : Integer.parseInt(getAttribute(child, "value")); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
829 |
f = new TIFFField(tag, samplesPerPixel); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
830 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
831 |
} else if (childName.equals("BlackIsZero")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
832 |
blackIsZero = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
833 |
} else if (childName.equals("Palette")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
834 |
Node entry = child.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
835 |
HashMap<Integer,char[]> palette = new HashMap<>(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
836 |
int maxIndex = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
837 |
while(entry != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
838 |
String entryName = entry.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
839 |
if(entryName.equals("PaletteEntry")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
840 |
String idx = getAttribute(entry, "index"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
841 |
int id = Integer.parseInt(idx); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
842 |
if(id > maxIndex) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
843 |
maxIndex = id; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
844 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
845 |
char red = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
846 |
(char)Integer.parseInt(getAttribute(entry, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
847 |
"red")); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
848 |
char green = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
849 |
(char)Integer.parseInt(getAttribute(entry, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
850 |
"green")); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
851 |
char blue = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
852 |
(char)Integer.parseInt(getAttribute(entry, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
853 |
"blue")); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
854 |
palette.put(Integer.valueOf(id), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
855 |
new char[] {red, green, blue}); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
856 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
857 |
gotPalette = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
858 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
859 |
entry = entry.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
860 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
861 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
862 |
if(gotPalette) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
863 |
int mapSize = maxIndex + 1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
864 |
int paletteLength = 3*mapSize; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
865 |
char[] paletteEntries = new char[paletteLength]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
866 |
Iterator<Map.Entry<Integer,char[]>> paletteIter |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
867 |
= palette.entrySet().iterator(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
868 |
while(paletteIter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
869 |
Map.Entry<Integer,char[]> paletteEntry |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
870 |
= paletteIter.next(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
871 |
int index = paletteEntry.getKey(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
872 |
char[] rgb = paletteEntry.getValue(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
873 |
paletteEntries[index] = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
874 |
(char)((rgb[0]*65535)/255); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
875 |
paletteEntries[mapSize + index] = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
876 |
(char)((rgb[1]*65535)/255); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
877 |
paletteEntries[2*mapSize + index] = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
878 |
(char)((rgb[2]*65535)/255); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
879 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
880 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
881 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_COLOR_MAP); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
882 |
f = new TIFFField(tag, TIFFTag.TIFF_SHORT, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
883 |
paletteLength, paletteEntries); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
884 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
885 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
886 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
887 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
888 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
889 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
890 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
891 |
int photometricInterpretation = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
892 |
if((colorSpaceType == null || colorSpaceType.equals("GRAY")) && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
893 |
blackIsZero != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
894 |
blackIsZero.equalsIgnoreCase("FALSE")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
895 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
896 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
897 |
} else if(colorSpaceType != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
898 |
if(colorSpaceType.equals("GRAY")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
899 |
boolean isTransparency = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
900 |
if(root instanceof IIOMetadataNode) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
901 |
IIOMetadataNode iioRoot = (IIOMetadataNode)root; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
902 |
NodeList siNodeList = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
903 |
iioRoot.getElementsByTagName("SubimageInterpretation"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
904 |
if(siNodeList.getLength() == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
905 |
Node siNode = siNodeList.item(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
906 |
String value = getAttribute(siNode, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
907 |
if(value.equals("TransparencyMask")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
908 |
isTransparency = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
909 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
910 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
911 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
912 |
if(isTransparency) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
913 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
914 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_TRANSPARENCY_MASK; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
915 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
916 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
917 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
918 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
919 |
} else if(colorSpaceType.equals("RGB")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
920 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
921 |
gotPalette ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
922 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_PALETTE_COLOR : |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
923 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_RGB; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
924 |
} else if(colorSpaceType.equals("YCbCr")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
925 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
926 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_Y_CB_CR; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
927 |
} else if(colorSpaceType.equals("CMYK")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
928 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
929 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_CMYK; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
930 |
} else if(colorSpaceType.equals("Lab")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
931 |
photometricInterpretation = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
932 |
BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_CIELAB; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
933 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
934 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
935 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
936 |
if(photometricInterpretation != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
937 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
938 |
f = new TIFFField(tag, photometricInterpretation); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
939 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
940 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
941 |
} else if (name.equals("Compression")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
942 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
943 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
944 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
945 |
if (childName.equals("CompressionTypeName")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
946 |
int compression = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
947 |
String compressionTypeName = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
948 |
getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
949 |
if(compressionTypeName.equalsIgnoreCase("None")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
950 |
compression = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
951 |
BaselineTIFFTagSet.COMPRESSION_NONE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
952 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
953 |
String[] compressionNames = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
954 |
TIFFImageWriter.compressionTypes; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
955 |
for(int i = 0; i < compressionNames.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
956 |
if(compressionNames[i].equalsIgnoreCase(compressionTypeName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
957 |
compression = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
958 |
TIFFImageWriter.compressionNumbers[i]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
959 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
960 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
961 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
962 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
963 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
964 |
if(compression != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
965 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_COMPRESSION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
966 |
f = new TIFFField(tag, compression); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
967 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
968 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
969 |
// Lossless is irrelevant. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
970 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
971 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
972 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
973 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
974 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
975 |
} else if (name.equals("Data")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
976 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
977 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
978 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
979 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
980 |
if (childName.equals("PlanarConfiguration")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
981 |
String pc = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
982 |
int planarConfiguration = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
983 |
if(pc.equals("PixelInterleaved")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
984 |
planarConfiguration = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
985 |
BaselineTIFFTagSet.PLANAR_CONFIGURATION_CHUNKY; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
986 |
} else if(pc.equals("PlaneInterleaved")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
987 |
planarConfiguration = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
988 |
BaselineTIFFTagSet.PLANAR_CONFIGURATION_PLANAR; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
989 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
990 |
if(planarConfiguration != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
991 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_PLANAR_CONFIGURATION); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
992 |
f = new TIFFField(tag, planarConfiguration); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
993 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
994 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
995 |
} else if (childName.equals("BitsPerSample")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
996 |
String bps = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
997 |
char[] bitsPerSample = listToCharArray(bps); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
998 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_BITS_PER_SAMPLE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
999 |
if(isPaletteColor) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1000 |
f = new TIFFField(tag, TIFFTag.TIFF_SHORT, 1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1001 |
new char[] {bitsPerSample[0]}); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1002 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1003 |
f = new TIFFField(tag, TIFFTag.TIFF_SHORT, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1004 |
bitsPerSample.length, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1005 |
bitsPerSample); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1006 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1007 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1008 |
} else if (childName.equals("SampleMSB")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1009 |
// Add FillOrder only if lsb-to-msb (right to left) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1010 |
// for all bands, i.e., SampleMSB is zero for all |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1011 |
// channels. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1012 |
String sMSB = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1013 |
int[] sampleMSB = listToIntArray(sMSB); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1014 |
boolean isRightToLeft = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1015 |
for(int i = 0; i < sampleMSB.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1016 |
if(sampleMSB[i] != 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1017 |
isRightToLeft = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1018 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1019 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1020 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1021 |
int fillOrder = isRightToLeft ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1022 |
BaselineTIFFTagSet.FILL_ORDER_RIGHT_TO_LEFT : |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1023 |
BaselineTIFFTagSet.FILL_ORDER_LEFT_TO_RIGHT; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1024 |
tag = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1025 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_FILL_ORDER); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1026 |
f = new TIFFField(tag, fillOrder); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1027 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1028 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1029 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1030 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1031 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1032 |
} else if (name.equals("Dimension")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1033 |
float pixelAspectRatio = -1.0f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1034 |
boolean gotPixelAspectRatio = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1035 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1036 |
float horizontalPixelSize = -1.0f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1037 |
boolean gotHorizontalPixelSize = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1038 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1039 |
float verticalPixelSize = -1.0f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1040 |
boolean gotVerticalPixelSize = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1041 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1042 |
boolean sizeIsAbsolute = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1043 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1044 |
float horizontalPosition = -1.0f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1045 |
boolean gotHorizontalPosition = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1046 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1047 |
float verticalPosition = -1.0f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1048 |
boolean gotVerticalPosition = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1049 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1050 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1051 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1052 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1053 |
if (childName.equals("PixelAspectRatio")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1054 |
String par = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1055 |
pixelAspectRatio = Float.parseFloat(par); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1056 |
gotPixelAspectRatio = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1057 |
} else if (childName.equals("ImageOrientation")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1058 |
String orientation = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1059 |
for (int i = 0; i < orientationNames.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1060 |
if (orientation.equals(orientationNames[i])) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1061 |
char[] oData = new char[1]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1062 |
oData[0] = (char)i; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1063 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1064 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1065 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_ORIENTATION), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1066 |
TIFFTag.TIFF_SHORT, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1067 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1068 |
oData); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1069 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1070 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1071 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1072 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1073 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1074 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1075 |
} else if (childName.equals("HorizontalPixelSize")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1076 |
String hps = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1077 |
horizontalPixelSize = Float.parseFloat(hps); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1078 |
gotHorizontalPixelSize = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1079 |
} else if (childName.equals("VerticalPixelSize")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1080 |
String vps = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1081 |
verticalPixelSize = Float.parseFloat(vps); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1082 |
gotVerticalPixelSize = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1083 |
} else if (childName.equals("HorizontalPosition")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1084 |
String hp = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1085 |
horizontalPosition = Float.parseFloat(hp); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1086 |
gotHorizontalPosition = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1087 |
} else if (childName.equals("VerticalPosition")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1088 |
String vp = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1089 |
verticalPosition = Float.parseFloat(vp); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1090 |
gotVerticalPosition = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1091 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1092 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1093 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1094 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1095 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1096 |
sizeIsAbsolute = gotHorizontalPixelSize || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1097 |
gotVerticalPixelSize; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1098 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1099 |
// Fill in pixel size data from aspect ratio |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1100 |
if (gotPixelAspectRatio) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1101 |
if (gotHorizontalPixelSize && !gotVerticalPixelSize) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1102 |
verticalPixelSize = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1103 |
horizontalPixelSize/pixelAspectRatio; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1104 |
gotVerticalPixelSize = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1105 |
} else if (gotVerticalPixelSize && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1106 |
!gotHorizontalPixelSize) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1107 |
horizontalPixelSize = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1108 |
verticalPixelSize*pixelAspectRatio; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1109 |
gotHorizontalPixelSize = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1110 |
} else if (!gotHorizontalPixelSize && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1111 |
!gotVerticalPixelSize) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1112 |
horizontalPixelSize = pixelAspectRatio; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1113 |
verticalPixelSize = 1.0f; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1114 |
gotHorizontalPixelSize = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1115 |
gotVerticalPixelSize = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1116 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1117 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1118 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1119 |
// Compute pixels/centimeter |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1120 |
if (gotHorizontalPixelSize) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1121 |
float xResolution = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1122 |
(sizeIsAbsolute ? 10.0f : 1.0f)/horizontalPixelSize; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1123 |
long[][] hData = new long[1][2]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1124 |
hData[0] = new long[2]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1125 |
hData[0][0] = (long)(xResolution*10000.0f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1126 |
hData[0][1] = (long)10000; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1127 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1128 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1129 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1130 |
TIFFTag.TIFF_RATIONAL, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1131 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1132 |
hData); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1133 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1134 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1135 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1136 |
if (gotVerticalPixelSize) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1137 |
float yResolution = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1138 |
(sizeIsAbsolute ? 10.0f : 1.0f)/verticalPixelSize; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1139 |
long[][] vData = new long[1][2]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1140 |
vData[0] = new long[2]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1141 |
vData[0][0] = (long)(yResolution*10000.0f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1142 |
vData[0][1] = (long)10000; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1143 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1144 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1145 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1146 |
TIFFTag.TIFF_RATIONAL, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1147 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1148 |
vData); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1149 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1150 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1151 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1152 |
// Emit ResolutionUnit tag |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1153 |
char[] res = new char[1]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1154 |
res[0] = (char)(sizeIsAbsolute ? |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1155 |
BaselineTIFFTagSet.RESOLUTION_UNIT_CENTIMETER : |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1156 |
BaselineTIFFTagSet.RESOLUTION_UNIT_NONE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1157 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1158 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1159 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_RESOLUTION_UNIT), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1160 |
TIFFTag.TIFF_SHORT, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1161 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1162 |
res); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1163 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1164 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1165 |
// Position |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1166 |
if(sizeIsAbsolute) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1167 |
if(gotHorizontalPosition) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1168 |
// Convert from millimeters to centimeters via |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1169 |
// numerator multiplier = denominator/10. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1170 |
long[][] hData = new long[1][2]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1171 |
hData[0][0] = (long)(horizontalPosition*10000.0f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1172 |
hData[0][1] = (long)100000; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1173 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1174 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1175 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_X_POSITION), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1176 |
TIFFTag.TIFF_RATIONAL, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1177 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1178 |
hData); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1179 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1180 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1181 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1182 |
if(gotVerticalPosition) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1183 |
// Convert from millimeters to centimeters via |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1184 |
// numerator multiplier = denominator/10. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1185 |
long[][] vData = new long[1][2]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1186 |
vData[0][0] = (long)(verticalPosition*10000.0f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1187 |
vData[0][1] = (long)100000; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1188 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1189 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1190 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_Y_POSITION), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1191 |
TIFFTag.TIFF_RATIONAL, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1192 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1193 |
vData); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1194 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1195 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1196 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1197 |
} else if (name.equals("Document")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1198 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1199 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1200 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1201 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1202 |
if (childName.equals("SubimageInterpretation")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1203 |
String si = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1204 |
int newSubFileType = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1205 |
if(si.equals("TransparencyMask")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1206 |
newSubFileType = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1207 |
BaselineTIFFTagSet.NEW_SUBFILE_TYPE_TRANSPARENCY; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1208 |
} else if(si.equals("ReducedResolution")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1209 |
newSubFileType = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1210 |
BaselineTIFFTagSet.NEW_SUBFILE_TYPE_REDUCED_RESOLUTION; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1211 |
} else if(si.equals("SinglePage")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1212 |
newSubFileType = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1213 |
BaselineTIFFTagSet.NEW_SUBFILE_TYPE_SINGLE_PAGE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1214 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1215 |
if(newSubFileType != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1216 |
tag = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1217 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_NEW_SUBFILE_TYPE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1218 |
f = new TIFFField(tag, newSubFileType); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1219 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1220 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1221 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1222 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1223 |
if (childName.equals("ImageCreationTime")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1224 |
String year = getAttribute(child, "year"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1225 |
String month = getAttribute(child, "month"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1226 |
String day = getAttribute(child, "day"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1227 |
String hour = getAttribute(child, "hour"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1228 |
String minute = getAttribute(child, "minute"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1229 |
String second = getAttribute(child, "second"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1230 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1231 |
StringBuffer sb = new StringBuffer(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1232 |
sb.append(year); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1233 |
sb.append(":"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1234 |
if(month.length() == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1235 |
sb.append("0"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1236 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1237 |
sb.append(month); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1238 |
sb.append(":"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1239 |
if(day.length() == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1240 |
sb.append("0"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1241 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1242 |
sb.append(day); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1243 |
sb.append(" "); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1244 |
if(hour.length() == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1245 |
sb.append("0"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1246 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1247 |
sb.append(hour); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1248 |
sb.append(":"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1249 |
if(minute.length() == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1250 |
sb.append("0"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1251 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1252 |
sb.append(minute); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1253 |
sb.append(":"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1254 |
if(second.length() == 1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1255 |
sb.append("0"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1256 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1257 |
sb.append(second); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1258 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1259 |
String[] dt = new String[1]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1260 |
dt[0] = sb.toString(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1261 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1262 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1263 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_DATE_TIME), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1264 |
TIFFTag.TIFF_ASCII, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1265 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1266 |
dt); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1267 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1268 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1269 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1270 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1271 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1272 |
} else if (name.equals("Text")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1273 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1274 |
String theAuthor = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1275 |
String theDescription = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1276 |
String theTitle = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1277 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1278 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1279 |
if(childName.equals("TextEntry")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1280 |
int tagNumber = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1281 |
NamedNodeMap childAttrs = child.getAttributes(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1282 |
Node keywordNode = childAttrs.getNamedItem("keyword"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1283 |
if(keywordNode != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1284 |
String keyword = keywordNode.getNodeValue(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1285 |
String value = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1286 |
if(!keyword.equals("") && !value.equals("")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1287 |
if(keyword.equalsIgnoreCase("DocumentName")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1288 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1289 |
BaselineTIFFTagSet.TAG_DOCUMENT_NAME; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1290 |
} else if(keyword.equalsIgnoreCase("ImageDescription")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1291 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1292 |
BaselineTIFFTagSet.TAG_IMAGE_DESCRIPTION; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1293 |
} else if(keyword.equalsIgnoreCase("Make")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1294 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1295 |
BaselineTIFFTagSet.TAG_MAKE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1296 |
} else if(keyword.equalsIgnoreCase("Model")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1297 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1298 |
BaselineTIFFTagSet.TAG_MODEL; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1299 |
} else if(keyword.equalsIgnoreCase("PageName")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1300 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1301 |
BaselineTIFFTagSet.TAG_PAGE_NAME; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1302 |
} else if(keyword.equalsIgnoreCase("Software")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1303 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1304 |
BaselineTIFFTagSet.TAG_SOFTWARE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1305 |
} else if(keyword.equalsIgnoreCase("Artist")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1306 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1307 |
BaselineTIFFTagSet.TAG_ARTIST; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1308 |
} else if(keyword.equalsIgnoreCase("HostComputer")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1309 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1310 |
BaselineTIFFTagSet.TAG_HOST_COMPUTER; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1311 |
} else if(keyword.equalsIgnoreCase("InkNames")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1312 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1313 |
BaselineTIFFTagSet.TAG_INK_NAMES; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1314 |
} else if(keyword.equalsIgnoreCase("Copyright")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1315 |
tagNumber = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1316 |
BaselineTIFFTagSet.TAG_COPYRIGHT; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1317 |
} else if(keyword.equalsIgnoreCase("author")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1318 |
theAuthor = value; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1319 |
} else if(keyword.equalsIgnoreCase("description")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1320 |
theDescription = value; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1321 |
} else if(keyword.equalsIgnoreCase("title")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1322 |
theTitle = value; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1323 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1324 |
if(tagNumber != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1325 |
f = new TIFFField(rootIFD.getTag(tagNumber), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1326 |
TIFFTag.TIFF_ASCII, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1327 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1328 |
new String[] {value}); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1329 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1330 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1331 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1332 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1333 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1334 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1335 |
} // child != null |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1336 |
if(theAuthor != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1337 |
getTIFFField(BaselineTIFFTagSet.TAG_ARTIST) == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1338 |
f = new TIFFField(rootIFD.getTag(BaselineTIFFTagSet.TAG_ARTIST), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1339 |
TIFFTag.TIFF_ASCII, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1340 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1341 |
new String[] {theAuthor}); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1342 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1343 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1344 |
if(theDescription != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1345 |
getTIFFField(BaselineTIFFTagSet.TAG_IMAGE_DESCRIPTION) == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1346 |
f = new TIFFField(rootIFD.getTag(BaselineTIFFTagSet.TAG_IMAGE_DESCRIPTION), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1347 |
TIFFTag.TIFF_ASCII, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1348 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1349 |
new String[] {theDescription}); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1350 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1351 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1352 |
if(theTitle != null && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1353 |
getTIFFField(BaselineTIFFTagSet.TAG_DOCUMENT_NAME) == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1354 |
f = new TIFFField(rootIFD.getTag(BaselineTIFFTagSet.TAG_DOCUMENT_NAME), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1355 |
TIFFTag.TIFF_ASCII, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1356 |
1, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1357 |
new String[] {theTitle}); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1358 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1359 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1360 |
} else if (name.equals("Transparency")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1361 |
Node child = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1362 |
while (child != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1363 |
String childName = child.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1364 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1365 |
if (childName.equals("Alpha")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1366 |
String alpha = getAttribute(child, "value"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1367 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1368 |
f = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1369 |
if (alpha.equals("premultiplied")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1370 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1371 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_EXTRA_SAMPLES), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1372 |
BaselineTIFFTagSet.EXTRA_SAMPLES_ASSOCIATED_ALPHA); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1373 |
} else if (alpha.equals("nonpremultiplied")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1374 |
f = new TIFFField( |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1375 |
rootIFD.getTag(BaselineTIFFTagSet.TAG_EXTRA_SAMPLES), |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1376 |
BaselineTIFFTagSet.EXTRA_SAMPLES_UNASSOCIATED_ALPHA); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1377 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1378 |
if (f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1379 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1380 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1381 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1382 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1383 |
child = child.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1384 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1385 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1386 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1387 |
node = node.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1388 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1389 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1390 |
// Set SampleFormat. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1391 |
if(sampleFormat != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1392 |
// Derive the value. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1393 |
int sf = -1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1394 |
if(sampleFormat.equals("SignedIntegral")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1395 |
sf = BaselineTIFFTagSet.SAMPLE_FORMAT_SIGNED_INTEGER; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1396 |
} else if(sampleFormat.equals("UnsignedIntegral")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1397 |
sf = BaselineTIFFTagSet.SAMPLE_FORMAT_UNSIGNED_INTEGER; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1398 |
} else if(sampleFormat.equals("Real")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1399 |
sf = BaselineTIFFTagSet.SAMPLE_FORMAT_FLOATING_POINT; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1400 |
} else if(sampleFormat.equals("Index")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1401 |
sf = BaselineTIFFTagSet.SAMPLE_FORMAT_UNSIGNED_INTEGER; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1402 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1403 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1404 |
if(sf != -1) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1405 |
// Derive the count. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1406 |
int count = 1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1407 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1408 |
// Try SamplesPerPixel first. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1409 |
f = getTIFFField(BaselineTIFFTagSet.TAG_SAMPLES_PER_PIXEL); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1410 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1411 |
count = f.getAsInt(0); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1412 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1413 |
// Try BitsPerSample. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1414 |
f = getTIFFField(BaselineTIFFTagSet.TAG_BITS_PER_SAMPLE); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1415 |
if(f != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1416 |
count = f.getCount(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1417 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1418 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1419 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1420 |
char[] sampleFormatArray = new char[count]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1421 |
Arrays.fill(sampleFormatArray, (char)sf); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1422 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1423 |
// Add SampleFormat. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1424 |
tag = rootIFD.getTag(BaselineTIFFTagSet.TAG_SAMPLE_FORMAT); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1425 |
f = new TIFFField(tag, TIFFTag.TIFF_SHORT, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1426 |
sampleFormatArray.length, sampleFormatArray); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1427 |
rootIFD.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1428 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1429 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1430 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1431 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1432 |
private static String getAttribute(Node node, String attrName) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1433 |
NamedNodeMap attrs = node.getAttributes(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1434 |
Node attr = attrs.getNamedItem(attrName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1435 |
return attr != null ? attr.getNodeValue() : null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1436 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1437 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1438 |
private Node getChildNode(Node node, String childName) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1439 |
Node childNode = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1440 |
if(node.hasChildNodes()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1441 |
NodeList childNodes = node.getChildNodes(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1442 |
int length = childNodes.getLength(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1443 |
for(int i = 0; i < length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1444 |
Node item = childNodes.item(i); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1445 |
if(item.getNodeName().equals(childName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1446 |
childNode = item; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1447 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1448 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1449 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1450 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1451 |
return childNode; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1452 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1453 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1454 |
public static TIFFIFD parseIFD(Node node) throws IIOInvalidTreeException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1455 |
if (!node.getNodeName().equals("TIFFIFD")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1456 |
fatal(node, "Expected \"TIFFIFD\" node"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1457 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1458 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1459 |
String tagSetNames = getAttribute(node, "tagSets"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1460 |
List<TIFFTagSet> tagSets = new ArrayList<TIFFTagSet>(5); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1461 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1462 |
if (tagSetNames != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1463 |
StringTokenizer st = new StringTokenizer(tagSetNames, ","); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1464 |
while (st.hasMoreTokens()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1465 |
String className = st.nextToken(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1466 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1467 |
Object o = null; |
40433
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1468 |
Class<?> setClass = null; |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1469 |
try { |
40433
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1470 |
ClassLoader cl = TIFFImageMetadata.class.getClassLoader(); |
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1471 |
setClass = Class.forName(className, false, cl); |
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1472 |
if (!TIFFTagSet.class.isAssignableFrom(setClass)) { |
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1473 |
fatal(node, "TagSets in IFD must be subset of" |
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1474 |
+ " TIFFTagSet class"); |
d0e7204495dc
8160455: KSS : class.forName issue in TIFFImageMetadata.java
jdv
parents:
36448
diff
changeset
|
1475 |
} |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1476 |
Method getInstanceMethod = |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1477 |
setClass.getMethod("getInstance", (Class[])null); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1478 |
o = getInstanceMethod.invoke(null, (Object[])null); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1479 |
} catch (NoSuchMethodException e) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1480 |
throw new RuntimeException(e); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1481 |
} catch (IllegalAccessException e) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1482 |
throw new RuntimeException(e); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1483 |
} catch (InvocationTargetException e) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1484 |
throw new RuntimeException(e); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1485 |
} catch (ClassNotFoundException e) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1486 |
throw new RuntimeException(e); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1487 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1488 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1489 |
if (!(o instanceof TIFFTagSet)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1490 |
fatal(node, "Specified tag set class \"" + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1491 |
className + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1492 |
"\" is not an instance of TIFFTagSet"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1493 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1494 |
tagSets.add((TIFFTagSet)o); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1495 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1496 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1497 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1498 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1499 |
TIFFIFD ifd = new TIFFIFD(tagSets); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1500 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1501 |
node = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1502 |
while (node != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1503 |
String name = node.getNodeName(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1504 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1505 |
TIFFField f = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1506 |
if (name.equals("TIFFIFD")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1507 |
TIFFIFD subIFD = parseIFD(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1508 |
String parentTagName = getAttribute(node, "parentTagName"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1509 |
String parentTagNumber = getAttribute(node, "parentTagNumber"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1510 |
TIFFTag tag = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1511 |
if(parentTagName != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1512 |
tag = TIFFIFD.getTag(parentTagName, tagSets); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1513 |
} else if(parentTagNumber != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1514 |
int tagNumber = Integer.parseUnsignedInt(parentTagNumber); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1515 |
tag = TIFFIFD.getTag(tagNumber, tagSets); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1516 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1517 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1518 |
int type; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1519 |
if (tag == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1520 |
type = TIFFTag.TIFF_LONG; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1521 |
tag = new TIFFTag(TIFFTag.UNKNOWN_TAG_NAME, 0, 1 << type); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1522 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1523 |
if (tag.isDataTypeOK(TIFFTag.TIFF_IFD_POINTER)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1524 |
type = TIFFTag.TIFF_IFD_POINTER; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1525 |
} else if (tag.isDataTypeOK(TIFFTag.TIFF_LONG)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1526 |
type = TIFFTag.TIFF_LONG; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1527 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1528 |
for (type = TIFFTag.MAX_DATATYPE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1529 |
type >= TIFFTag.MIN_DATATYPE; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1530 |
type--) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1531 |
if (tag.isDataTypeOK(type)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1532 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1533 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1534 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1535 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1536 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1537 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1538 |
f = new TIFFField(tag, type, 1L, subIFD); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1539 |
} else if (name.equals("TIFFField")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1540 |
int number = Integer.parseInt(getAttribute(node, "number")); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1541 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1542 |
TIFFTagSet tagSet = null; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1543 |
Iterator<TIFFTagSet> iter = tagSets.iterator(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1544 |
while (iter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1545 |
TIFFTagSet t = iter.next(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1546 |
if (t.getTag(number) != null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1547 |
tagSet = t; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1548 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1549 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1550 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1551 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1552 |
f = TIFFField.createFromMetadataNode(tagSet, node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1553 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1554 |
fatal(node, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1555 |
"Expected either \"TIFFIFD\" or \"TIFFField\" node, got " |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1556 |
+ name); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1557 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1558 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1559 |
ifd.addTIFFField(f); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1560 |
node = node.getNextSibling(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1561 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1562 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1563 |
return ifd; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1564 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1565 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1566 |
private void mergeNativeTree(Node root) throws IIOInvalidTreeException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1567 |
Node node = root; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1568 |
if (!node.getNodeName().equals(nativeMetadataFormatName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1569 |
fatal(node, "Root must be " + nativeMetadataFormatName); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1570 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1571 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1572 |
node = node.getFirstChild(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1573 |
if (node == null || !node.getNodeName().equals("TIFFIFD")) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1574 |
fatal(root, "Root must have \"TIFFIFD\" child"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1575 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1576 |
TIFFIFD ifd = parseIFD(node); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1577 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1578 |
List<TIFFTagSet> rootIFDTagSets = rootIFD.getTagSetList(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1579 |
Iterator<TIFFTagSet> tagSetIter = ifd.getTagSetList().iterator(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1580 |
while(tagSetIter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1581 |
Object o = tagSetIter.next(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1582 |
if(o instanceof TIFFTagSet && !rootIFDTagSets.contains(o)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1583 |
rootIFD.addTagSet((TIFFTagSet)o); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1584 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1585 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1586 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1587 |
Iterator<TIFFField> ifdIter = ifd.iterator(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1588 |
while(ifdIter.hasNext()) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1589 |
TIFFField field = ifdIter.next(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1590 |
rootIFD.addTIFFField(field); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1591 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1592 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1593 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1594 |
public void mergeTree(String formatName, Node root) |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1595 |
throws IIOInvalidTreeException{ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1596 |
if (formatName.equals(nativeMetadataFormatName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1597 |
if (root == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1598 |
throw new NullPointerException("root == null!"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1599 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1600 |
mergeNativeTree(root); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1601 |
} else if (formatName.equals |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1602 |
(IIOMetadataFormatImpl.standardMetadataFormatName)) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1603 |
if (root == null) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1604 |
throw new NullPointerException("root == null!"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1605 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1606 |
mergeStandardTree(root); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1607 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1608 |
throw new IllegalArgumentException("Not a recognized format!"); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1609 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1610 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1611 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1612 |
public void reset() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1613 |
rootIFD = new TIFFIFD(tagSets); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1614 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1615 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1616 |
public TIFFIFD getRootIFD() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1617 |
return rootIFD; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1618 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1619 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1620 |
public TIFFField getTIFFField(int tagNumber) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1621 |
return rootIFD.getTIFFField(tagNumber); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1622 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1623 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1624 |
public void removeTIFFField(int tagNumber) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1625 |
rootIFD.removeTIFFField(tagNumber); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1626 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1627 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1628 |
/** |
36448
a07e108d5722
8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents:
34416
diff
changeset
|
1629 |
* Returns a {@code TIFFImageMetadata} wherein all fields in the |
a07e108d5722
8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents:
34416
diff
changeset
|
1630 |
* root IFD from the {@code BaselineTIFFTagSet} are copied by value |
34416
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1631 |
* and all other fields copied by reference. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1632 |
*/ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1633 |
public TIFFImageMetadata getShallowClone() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1634 |
return new TIFFImageMetadata(rootIFD.getShallowClone()); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1635 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
1636 |
} |