jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java
author bpb
Mon, 23 Nov 2015 12:26:12 -0800
changeset 34416 68c0d866db5d
child 35302 e4d2275861c3
permissions -rw-r--r--
8143342: Integrate Java Image I/O support for TIFF per JEP 262 Summary: Port TIFF reader and writer plugins from JAI Image I/O Tools to JDK 9 Reviewed-by: prr, serb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     1
/*
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     2
 * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
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 javax.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.util.StringTokenizer;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    28
import org.w3c.dom.NamedNodeMap;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    29
import org.w3c.dom.Node;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    30
import com.sun.imageio.plugins.tiff.TIFFFieldNode;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    31
import com.sun.imageio.plugins.tiff.TIFFIFD;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    32
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    33
/**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    34
 * A class representing a field in a TIFF 6.0 Image File Directory.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    35
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    36
 * <p> A field in a TIFF Image File Directory (IFD) is defined as a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    37
 * tag number accompanied by a sequence of values of identical data type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    38
 * TIFF 6.0 defines 12 data types; a 13th type <code>IFD</code> is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    39
 * defined in TIFF Tech Note 1 of TIFF Specification Supplement 1. These
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    40
 * TIFF data types are referred to by Java constants and mapped internally
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    41
 * onto Java language data types and type names as follows:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    42
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    43
 * <br>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    44
 * <br>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    45
 * <table border="1">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    46
 * <caption>TIFF Data Type to Java Data Type Mapping</caption>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    47
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    48
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    49
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    50
 * <b>TIFF Data Type</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    51
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    52
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    53
 * <b>Java Constant</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    54
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    55
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    56
 * <b>Java Data Type</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    57
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    58
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    59
 * <b>Java Type Name</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    60
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    61
 * </tr>
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
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    64
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    65
 * <tt>BYTE</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    66
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    67
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    68
 * {@link TIFFTag#TIFF_BYTE}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    69
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    70
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    71
 * <code>byte</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    72
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    73
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    74
 * <code>"Byte"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    75
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    76
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    77
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    78
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    79
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    80
 * <tt>ASCII</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    81
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    82
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    83
 * {@link TIFFTag#TIFF_ASCII}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    84
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    85
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    86
 * <code>String</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    87
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    88
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    89
 * <code>"Ascii"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    90
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    91
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    92
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    93
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    94
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    95
 * <tt>SHORT</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    96
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    97
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    98
 * {@link TIFFTag#TIFF_SHORT}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    99
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   100
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   101
 * <code>char</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   102
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   103
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   104
 * <code>"Short"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   105
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   106
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   107
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   108
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   109
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   110
 * <tt>LONG</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   111
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   112
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   113
 * {@link TIFFTag#TIFF_LONG}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   114
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   115
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   116
 * <code>long</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   117
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   118
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   119
 * <code>"Long"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   120
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   121
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   122
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   123
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   124
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   125
 * <tt>RATIONAL</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   126
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   127
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   128
 * {@link TIFFTag#TIFF_RATIONAL}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   129
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   130
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   131
 * <code>long[2]</code> {numerator, denominator}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   132
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   133
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   134
 * <code>"Rational"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   135
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   136
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   137
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   138
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   139
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   140
 * <tt>SBYTE</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   141
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   142
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   143
 * {@link TIFFTag#TIFF_SBYTE}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   144
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   145
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   146
 * <code>byte</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   147
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   148
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   149
 * <code>"SByte"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   150
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   151
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   152
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   153
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   154
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   155
 * <tt>UNDEFINED</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   156
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   157
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   158
 * {@link TIFFTag#TIFF_UNDEFINED}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   159
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   160
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   161
 * <code>byte</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   162
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   163
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   164
 * <code>"Undefined"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   165
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   166
 * </tr>
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
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   169
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   170
 * <tt>SSHORT</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   171
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   172
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   173
 * {@link TIFFTag#TIFF_SSHORT}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   174
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   175
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   176
 * <code>short</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   177
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   178
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   179
 * <code>"SShort"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   180
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   181
 * </tr>
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
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   184
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   185
 * <tt>SLONG</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   186
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   187
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   188
 * {@link TIFFTag#TIFF_SLONG}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   189
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   190
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   191
 * <code>int</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   192
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   193
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   194
 * <code>"SLong"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   195
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   196
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   197
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   198
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   199
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   200
 * <tt>SRATIONAL</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   201
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   202
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   203
 * {@link TIFFTag#TIFF_SRATIONAL}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   204
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   205
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   206
 * <code>int[2]</code> {numerator, denominator}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   207
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   208
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   209
 * <code>"SRational"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   210
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   211
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   212
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   213
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   214
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   215
 * <tt>FLOAT</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   216
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   217
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   218
 * {@link TIFFTag#TIFF_FLOAT}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   219
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   220
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   221
 * <code>float</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   222
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   223
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   224
 * <code>"Float"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   225
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   226
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   227
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   228
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   229
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   230
 * <tt>DOUBLE</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   231
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   232
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   233
 * {@link TIFFTag#TIFF_DOUBLE}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   234
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   235
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   236
 * <code>double</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   237
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   238
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   239
 * <code>"Double"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   240
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   241
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   242
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   243
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   244
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   245
 * <tt>IFD</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   246
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   247
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   248
 * {@link TIFFTag#TIFF_IFD_POINTER}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   249
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   250
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   251
 * <code>long</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   252
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   253
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   254
 * <code>"IFDPointer"</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   255
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   256
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   257
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   258
 * </table>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   259
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   260
 * @since 1.9
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   261
 * @see   TIFFDirectory
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   262
 * @see   TIFFTag
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   263
 */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   264
public class TIFFField implements Cloneable {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   265
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   266
    private static final String[] typeNames = {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   267
        null,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   268
        "Byte", "Ascii", "Short", "Long", "Rational",
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   269
        "SByte", "Undefined", "SShort", "SLong", "SRational",
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   270
        "Float", "Double", "IFDPointer"
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   273
    private static final boolean[] isIntegral = {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   274
        false,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   275
        true, false, true, true, false,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   276
        true, true, true, true, false,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   277
        false, false, false
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
    /** The tag. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   281
    private TIFFTag tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   282
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   283
    /** The tag number. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   284
    private int tagNumber;
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
    /** The tag type. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   287
    private int type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   288
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   289
    /** The number of data items present in the field. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   290
    private int count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   291
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   292
    /** The field data. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   293
    private Object data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   294
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   295
    /** The IFD contents if available. This will usually be a TIFFIFD. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   296
    private TIFFDirectory dir;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   297
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   298
    /** The default constructor. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   299
    private TIFFField() {}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   300
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   301
    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
   302
        NamedNodeMap attrs = node.getAttributes();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   303
        return attrs.getNamedItem(attrName).getNodeValue();
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
    private static void initData(Node node,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   307
                                 int[] otype, int[] ocount, Object[] odata) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   308
        int type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   309
        int count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   310
        Object data = null;
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
        String typeName = node.getNodeName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   313
        typeName = typeName.substring(4);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   314
        typeName = typeName.substring(0, typeName.length() - 1);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   315
        type = TIFFField.getTypeByName(typeName);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   316
        if (type == -1) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   317
            throw new IllegalArgumentException("typeName = " + typeName);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   318
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   319
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   320
        Node child = node.getFirstChild();
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
        count = 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   323
        while (child != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   324
            String childTypeName = child.getNodeName().substring(4);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   325
            if (!typeName.equals(childTypeName)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   326
                // warning
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   327
            }
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
            ++count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   330
            child = child.getNextSibling();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   331
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   332
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   333
        if (count > 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   334
            data = createArrayForType(type, count);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   335
            child = node.getFirstChild();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   336
            int idx = 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   337
            while (child != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   338
                String value = getAttribute(child, "value");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   339
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   340
                String numerator, denominator;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   341
                int slashPos;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   342
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   343
                switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   344
                case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   345
                    ((String[])data)[idx] = value;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   346
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   347
                case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   348
                case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   349
                    ((byte[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   350
                        (byte)Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   351
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   352
                case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   353
                    ((char[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   354
                        (char)Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   355
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   356
                case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   357
                    ((short[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   358
                        (short)Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   359
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   360
                case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   361
                    ((int[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   362
                        Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   363
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   364
                case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   365
                case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   366
                    ((long[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   367
                        Long.parseLong(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   368
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   369
                case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   370
                    ((float[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   371
                        Float.parseFloat(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   372
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   373
                case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   374
                    ((double[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   375
                        Double.parseDouble(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   376
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   377
                case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   378
                    slashPos = value.indexOf("/");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   379
                    numerator = value.substring(0, slashPos);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   380
                    denominator = value.substring(slashPos + 1);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   381
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   382
                    ((int[][])data)[idx] = new int[2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   383
                    ((int[][])data)[idx][0] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   384
                        Integer.parseInt(numerator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   385
                    ((int[][])data)[idx][1] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   386
                        Integer.parseInt(denominator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   387
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   388
                case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   389
                    slashPos = value.indexOf("/");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   390
                    numerator = value.substring(0, slashPos);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   391
                    denominator = value.substring(slashPos + 1);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   392
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   393
                    ((long[][])data)[idx] = new long[2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   394
                    ((long[][])data)[idx][0] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   395
                        Long.parseLong(numerator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   396
                    ((long[][])data)[idx][1] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   397
                        Long.parseLong(denominator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   398
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   399
                default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   400
                    // error
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   401
                }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   402
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   403
                idx++;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   404
                child = child.getNextSibling();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   405
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   406
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   407
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   408
        otype[0] = type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   409
        ocount[0] = count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   410
        odata[0] = data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   411
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   412
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   413
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   414
     * Creates a <code>TIFFField</code> from a TIFF native image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   415
     * metadata node. If the value of the <tt>"tagNumber"</tt> attribute
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   416
     * of the node is not found in <code>tagSet</code> then a new
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   417
     * <code>TIFFTag</code> with name <code>TIFFTag.UNKNOWN_TAG_NAME</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   418
     * will be created and assigned to the field.
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
     * @param tagSet The <code>TIFFTagSet</code> to which the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   421
     * <code>TIFFTag</code> of the field belongs.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   422
     * @param node A native TIFF image metadata <code>TIFFField</code> node.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   423
     * @throws NullPointerException if <code>node</code> is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   424
     * <code>null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   425
     * @throws IllegalArgumentException if the name of the node is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   426
     * <code>"TIFFField"</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   427
     * @return A new {@code TIFFField}.
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
    public static TIFFField createFromMetadataNode(TIFFTagSet tagSet,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   430
                                                   Node node) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   431
        if (node == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   432
            throw new NullPointerException("node == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   433
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   434
        String name = node.getNodeName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   435
        if (!name.equals("TIFFField")) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   436
            throw new IllegalArgumentException("!name.equals(\"TIFFField\")");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   437
        }
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
        int tagNumber = Integer.parseInt(getAttribute(node, "number"));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   440
        TIFFTag tag = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   441
        if (tagSet != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   442
            tag = tagSet.getTag(tagNumber);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   443
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   444
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   445
        int type = TIFFTag.TIFF_UNDEFINED;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   446
        int count = 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   447
        Object data = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   448
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   449
        Node child = node.getFirstChild();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   450
        if (child != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   451
            String typeName = child.getNodeName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   452
            if (typeName.equals("TIFFUndefined")) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   453
                String values = getAttribute(child, "value");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   454
                StringTokenizer st = new StringTokenizer(values, ",");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   455
                count = st.countTokens();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   456
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   457
                byte[] bdata = new byte[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   458
                for (int i = 0; i < count; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   459
                    bdata[i] = (byte)Integer.parseInt(st.nextToken());
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   462
                type = TIFFTag.TIFF_UNDEFINED;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   463
                data = bdata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   464
            } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   465
                int[] otype = new int[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   466
                int[] ocount = new int[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   467
                Object[] odata = new Object[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   468
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   469
                initData(node.getFirstChild(), otype, ocount, odata);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   470
                type = otype[0];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   471
                count = ocount[0];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   472
                data = odata[0];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   473
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   474
        } else if (tag != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   475
            int t = TIFFTag.MAX_DATATYPE;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   476
            while(t >= TIFFTag.MIN_DATATYPE && !tag.isDataTypeOK(t)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   477
                t--;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   478
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   479
            type = t;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   480
        }
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
        if (tag == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   483
            tag = new TIFFTag(TIFFTag.UNKNOWN_TAG_NAME, tagNumber, 1 << type);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   484
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   485
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   486
        return new TIFFField(tag, type, count, data);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   487
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   488
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   489
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   490
     * Constructs a <code>TIFFField</code> with arbitrary data. The
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   491
     * <code>type</code> parameter must be a value for which
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   492
     * {@link TIFFTag#isDataTypeOK tag.isDataTypeOK()}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   493
     * returns <code>true</code>. The <code>data</code> parameter must
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   494
     * be an array of a Java type appropriate for the type of the TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   495
     * field.
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
     * <p>Note that the value (data) of the <code>TIFFField</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   498
     * will always be the actual field value regardless of the number of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   499
     * bytes required for that value. This is the case despite the fact
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   500
     * that the TIFF <i>IFD Entry</i> corresponding to the field may
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   501
     * actually contain the offset to the value of the field rather than
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   502
     * the value itself (the latter occurring if and only if the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   503
     * value fits into 4 bytes). In other words, the value of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   504
     * field will already have been read from the TIFF stream. (An exception
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   505
     * to this case may occur when the field represents the contents of a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   506
     * non-baseline IFD. In that case the data will be a <code>long[]</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   507
     * containing the offset to the IFD and the <code>TIFFDirectory</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   508
     * returned by {@link #getDirectory()} will be its contents.)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   509
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   510
     * @param tag The tag to associated with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   511
     * @param type One of the <code>TIFFTag.TIFF_*</code> constants
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   512
     * indicating the data type of the field as written to the TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   513
     * @param count The number of data values.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   514
     * @param data The actual data content of the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   515
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   516
     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   517
     * @throws IllegalArgumentException if <code>type</code> is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   518
     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   519
     * @throws IllegalArgumentException if <code>type</code> is an unacceptable
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   520
     * data type for the supplied <code>TIFFTag</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   521
     * @throws IllegalArgumentException if <code>count&nbsp;&lt;&nbsp;0</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   522
     * @throws NullPointerException if <code>data&nbsp;==&nbsp;null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   523
     * @throws IllegalArgumentException if <code>data</code> is an instance of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   524
     * a class incompatible with the specified type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   525
     * @throws IllegalArgumentException if the size of the data array is wrong.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   526
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   527
    public TIFFField(TIFFTag tag, int type, int count, Object data) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   528
        if(tag == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   529
            throw new NullPointerException("tag == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   530
        } else if(type < TIFFTag.MIN_DATATYPE || type > TIFFTag.MAX_DATATYPE) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   531
            throw new IllegalArgumentException("Unknown data type "+type);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   532
        } else if(!tag.isDataTypeOK(type)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   533
            throw new IllegalArgumentException("Illegal data type " + type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   534
                + " for " + tag.getName() + " tag");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   535
        } else if(count < 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   536
            throw new IllegalArgumentException("count < 0!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   537
        } else if(data == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   538
            throw new NullPointerException("data == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   539
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   540
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   541
        boolean isDataArrayCorrect = false;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   542
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   543
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   544
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   545
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   546
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   547
            isDataArrayCorrect = data instanceof byte[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   548
                && ((byte[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   549
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   550
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   551
            isDataArrayCorrect = data instanceof String[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   552
                && ((String[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   553
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   554
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   555
            isDataArrayCorrect = data instanceof char[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   556
                && ((char[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   557
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   558
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   559
            isDataArrayCorrect = data instanceof long[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   560
                && ((long[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   561
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   562
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   563
            isDataArrayCorrect = data instanceof long[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   564
                && ((long[])data).length == 1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   565
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   566
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   567
            isDataArrayCorrect = data instanceof long[][]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   568
                && ((long[][])data).length == count
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   569
                && ((long[][])data)[0].length == 2;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   570
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   571
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   572
            isDataArrayCorrect = data instanceof short[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   573
                && ((short[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   574
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   575
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   576
            isDataArrayCorrect = data instanceof int[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   577
                && ((int[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   578
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   579
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   580
            isDataArrayCorrect = data instanceof int[][]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   581
                && ((int[][])data).length == count
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   582
                && ((int[][])data)[0].length == 2;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   583
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   584
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   585
            isDataArrayCorrect = data instanceof float[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   586
                && ((float[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   587
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   588
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   589
            isDataArrayCorrect = data instanceof double[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   590
                && ((double[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   591
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   592
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   593
            throw new IllegalArgumentException("Unknown data type "+type);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   594
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   595
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   596
        if (!isDataArrayCorrect) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   597
            throw new IllegalArgumentException
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   598
                ("Illegal class or length for data array");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   599
        }
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
        this.tag = tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   602
        this.tagNumber = tag.getNumber();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   603
        this.type = type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   604
        this.count = count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   605
        this.data = data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   606
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   607
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   608
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   609
     * Constructs a data array using {@link #createArrayForType
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   610
     * createArrayForType()} and invokes
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   611
     * {@link #TIFFField(TIFFTag,int,int,Object)} with the supplied
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   612
     * parameters and the created array.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   613
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   614
     * @param tag The tag to associated with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   615
     * @param type One of the <code>TIFFTag.TIFF_*</code> constants
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   616
     * indicating the data type of the field as written to the TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   617
     * @param count The number of data values.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   618
     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   619
     * @throws IllegalArgumentException if <code>type</code> is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   620
     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   621
     * @throws IllegalArgumentException if <code>type</code> is an unacceptable
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   622
     * data type for the supplied <code>TIFFTag</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   623
     * @throws IllegalArgumentException if <code>count&nbsp;&lt;&nbsp;0</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   624
     * @see #TIFFField(TIFFTag,int,int,Object)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   625
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   626
    public TIFFField(TIFFTag tag, int type, int count) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   627
        this(tag, type, count, createArrayForType(type, count));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   628
    }
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   631
     * Constructs a <code>TIFFField</code> with a single non-negative integral
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   632
     * value.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   633
     * The field will have type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   634
     * {@link TIFFTag#TIFF_SHORT  TIFF_SHORT} if
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   635
     * <code>val&nbsp;&lt;&nbsp;65536</code> and type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   636
     * {@link TIFFTag#TIFF_LONG TIFF_LONG} otherwise.  The count
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   637
     * of the field will be unity.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   638
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   639
     * @param tag The tag to associate with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   640
     * @param value The value to associate with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   641
     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   642
     * @throws IllegalArgumentException if the derived type is unacceptable
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   643
     * for the supplied <code>TIFFTag</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   644
     * @throws IllegalArgumentException if <code>value&nbsp;&lt;&nbsp;0</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   645
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   646
    public TIFFField(TIFFTag tag, int value) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   647
        if(tag == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   648
            throw new NullPointerException("tag == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   649
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   650
        if (value < 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   651
            throw new IllegalArgumentException("value < 0!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   652
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   653
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   654
        this.tag = tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   655
        this.tagNumber = tag.getNumber();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   656
        this.count = 1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   657
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   658
        if (value < 65536) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   659
            if (!tag.isDataTypeOK(TIFFTag.TIFF_SHORT)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   660
                throw new IllegalArgumentException("Illegal data type "
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   661
                    + TIFFTag.TIFF_SHORT + " for " + tag.getName() + " tag");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   662
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   663
            this.type = TIFFTag.TIFF_SHORT;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   664
            char[] cdata = new char[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   665
            cdata[0] = (char)value;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   666
            this.data = cdata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   667
        } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   668
            if (!tag.isDataTypeOK(TIFFTag.TIFF_LONG)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   669
                throw new IllegalArgumentException("Illegal data type "
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   670
                    + TIFFTag.TIFF_LONG + " for " + tag.getName() + " tag");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   671
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   672
            this.type = TIFFTag.TIFF_LONG;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   673
            long[] ldata = new long[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   674
            ldata[0] = value;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   675
            this.data = ldata;
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
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   678
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   679
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   680
     * Constructs a <code>TIFFField</code> with an IFD offset and contents.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   681
     * The offset will be stored as the data of this field as
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   682
     * <code>long[] {offset}</code>. The directory will not be cloned. The count
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   683
     * of the field will be unity.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   684
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   685
     * @param tag The tag to associated with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   686
     * @param type One of the constants <code>TIFFTag.TIFF_LONG</code> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   687
     * <code>TIFFTag.TIFF_IFD_POINTER</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   688
     * @param offset The IFD offset.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   689
     * @param dir The directory.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   690
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   691
     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   692
     * @throws IllegalArgumentException if <code>type</code> is neither
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   693
     * <code>TIFFTag.TIFF_LONG</code> nor <code>TIFFTag.TIFF_IFD_POINTER</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   694
     * @throws IllegalArgumentException if <code>type</code> is an unacceptable
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   695
     * data type for the supplied <code>TIFFTag</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   696
     * @throws IllegalArgumentException if <code>offset</code> is non-positive.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   697
     * @throws NullPointerException if <code>dir&nbsp;==&nbsp;null</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   698
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   699
     * @see #TIFFField(TIFFTag,int,int,Object)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   700
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   701
    public TIFFField(TIFFTag tag, int type, long offset, TIFFDirectory dir) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   702
        this(tag, type, 1, new long[] {offset});
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   703
        if (type != TIFFTag.TIFF_LONG && type != TIFFTag.TIFF_IFD_POINTER) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   704
            throw new IllegalArgumentException("type " + type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   705
                + " is neither TIFFTag.TIFF_LONG nor TIFFTag.TIFF_IFD_POINTER");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   706
        } else if (offset <= 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   707
            throw new IllegalArgumentException("offset " + offset
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   708
                + " is non-positive");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   709
        } else if (dir == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   710
            throw new NullPointerException("dir == null");
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
        this.dir = dir;
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   715
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   716
     * Retrieves the tag associated with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   717
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   718
     * @return The associated <code>TIFFTag</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   719
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   720
    public TIFFTag getTag() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   721
        return tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   722
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   723
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   724
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   725
     * Retrieves the tag number in the range <code>[0,&nbsp;65535]</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   726
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   727
     * @return The tag number.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   728
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   729
    public int getTagNumber() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   730
        return tagNumber;
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   734
     * Returns the type of the data stored in the field.  For a TIFF 6.0
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   735
     * stream, the value will equal one of the <code>TIFFTag.TIFF_*</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   736
     * constants. For future revisions of TIFF, higher values are possible.
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
     * @return The data type of the field value.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   739
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   740
    public int getType() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   741
        return type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   742
    }
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
     * Returns the name of the supplied data type constant.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   746
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   747
     * @param dataType One of the <code>TIFFTag.TIFF_*</code> constants
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   748
     * indicating the data type of the field as written to the TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   749
     * @return The type name corresponding to the supplied type constant.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   750
     * @throws IllegalArgumentException if <code>dataType</code> is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   751
     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
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
    public static String getTypeName(int dataType) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   754
        if (dataType < TIFFTag.MIN_DATATYPE ||
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   755
            dataType > TIFFTag.MAX_DATATYPE) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   756
            throw new IllegalArgumentException("Unknown data type "+dataType);
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 typeNames[dataType];
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   763
     * Returns the data type constant corresponding to the supplied data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   764
     * type name. If the name is unknown <code>-1</code> will be returned.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   765
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   766
     * @param typeName The type name.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   767
     * @return One of the <code>TIFFTag.TIFF_*</code> constants or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   768
     * <code>-1</code> if the name is not recognized.
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
    public static int getTypeByName(String typeName) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   771
        for (int i = TIFFTag.MIN_DATATYPE; i <= TIFFTag.MAX_DATATYPE; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   772
            if (typeName.equals(typeNames[i])) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   773
                return i;
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   777
        return -1;
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   780
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   781
     * Creates an array appropriate for the indicated data type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   782
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   783
     * @param dataType One of the <code>TIFFTag.TIFF_*</code> data type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   784
     * constants.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   785
     * @param count The number of values in the array.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   786
     * @return An array appropriate for the specified data type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   787
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   788
     * @throws IllegalArgumentException if <code>dataType</code> is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   789
     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   790
     * @throws IllegalArgumentException if <code>count&nbsp;&lt;&nbsp;0</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   791
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   792
    public static Object createArrayForType(int dataType, int count) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   793
        if(count < 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   794
            throw new IllegalArgumentException("count < 0!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   795
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   796
        switch (dataType) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   797
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   798
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   799
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   800
            return new byte[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   801
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   802
            return new String[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   803
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   804
            return new char[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   805
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   806
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   807
            return new long[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   808
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   809
            return new long[count][2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   810
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   811
            return new short[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   812
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   813
            return new int[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   814
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   815
            return new int[count][2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   816
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   817
            return new float[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   818
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   819
            return new double[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   820
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   821
            throw new IllegalArgumentException("Unknown data type "+dataType);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   822
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   823
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   824
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   825
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   826
     * Returns the <code>TIFFField</code> as a node named either
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   827
     * <tt>"TIFFField"</tt> or <tt>"TIFFIFD"</tt> as described in the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   828
     * TIFF native image metadata specification. The node will be named
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   829
     * <tt>"TIFFIFD"</tt> if and only if the field's data object is an
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   830
     * instance of {@link TIFFDirectory} or equivalently
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   831
     * {@link TIFFTag#isIFDPointer getTag.isIFDPointer()} returns
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   832
     * <code>true</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   833
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   834
     * @return a <code>Node</code> named <tt>"TIFFField"</tt> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   835
     * <tt>"TIFFIFD"</tt>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   836
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   837
    public Node getAsNativeNode() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   838
        return new TIFFFieldNode(this);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   839
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   840
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   841
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   842
     * Indicates whether the value associated with the field is of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   843
     * integral data type.
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
     * @return Whether the field type is integral.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   846
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   847
    public boolean isIntegral() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   848
        return isIntegral[type];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   849
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   850
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   851
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   852
     * Returns the number of data items present in the field.  For
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   853
     * <code>TIFFTag.TIFF_ASCII</code> fields, the value returned is the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   854
     * number of <code>String</code>s, not the total length of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   855
     * data as in the file representation.
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
     * @return The number of data items present in the field.
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
    public int getCount() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   860
        return count;
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   863
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   864
     * Returns a reference to the data object associated with the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   865
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   866
     * @return The data object of the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   867
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   868
    public Object getData() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   869
        return data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   870
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   871
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   872
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   873
     * Returns the data as an uninterpreted array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   874
     * <code>byte</code>s.  The type of the field must be one of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   875
     * <code>TIFFTag.TIFF_BYTE</code>, <code>TIFF_SBYTE</code>, or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   876
     * <code>TIFF_UNDEFINED</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   877
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   878
     * <p> For data in <code>TIFFTag.TIFF_BYTE</code> format, the application
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   879
     * must take care when promoting the data to longer integral types
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   880
     * to avoid sign extension.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   881
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   882
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   883
     * <code>TIFF_BYTE</code>, <code>TIFF_SBYTE</code>, or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   884
     * <code>TIFF_UNDEFINED</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   885
     * @return The data as an uninterpreted array of bytes.
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
    public byte[] getAsBytes() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   888
        return (byte[])data;
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   892
     * Returns <code>TIFFTag.TIFF_SHORT</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   893
     * <code>char</code>s (unsigned 16-bit integers).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   894
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   895
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   896
     * <code>TIFF_SHORT</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   897
     * @return The data as an array of {@code char}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   898
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   899
    public char[] getAsChars() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   900
        return (char[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   901
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   902
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   903
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   904
     * Returns <code>TIFFTag.TIFF_SSHORT</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   905
     * <code>short</code>s (signed 16-bit integers).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   906
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   907
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   908
     * <code>TIFF_SSHORT</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   909
     * @return The data as an array of {@code short}s.
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
    public short[] getAsShorts() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   912
        return (short[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   913
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   914
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   915
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   916
     * Returns <code>TIFFTag.TIFF_SLONG</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   917
     * <code>int</code>s (signed 32-bit integers).
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
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   920
     * <code>TIFF_SHORT</code>, <code>TIFF_SSHORT</code>, or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   921
     * <code>TIFF_SLONG</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   922
     * @return The data as an array of {@code int}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   923
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   924
    public int[] getAsInts() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   925
        if (data instanceof int[]) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   926
            return (int[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   927
        } else if (data instanceof char[]){
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   928
            char[] cdata = (char[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   929
            int[] idata = new int[cdata.length];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   930
            for (int i = 0; i < cdata.length; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   931
                idata[i] = cdata[i] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   932
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   933
            return idata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   934
        } else if (data instanceof short[]){
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   935
            short[] sdata = (short[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   936
            int[] idata = new int[sdata.length];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   937
            for (int i = 0; i < sdata.length; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   938
                idata[i] = (int)sdata[i];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   939
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   940
            return idata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   941
        } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   942
            throw new ClassCastException("Data not char[], short[], or int[]!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   943
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   944
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   945
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   946
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   947
     * Returns <code>TIFFTag.TIFF_LONG</code> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   948
     * <code>TIFF_IFD_POINTER</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   949
     * <code>long</code>s (signed 64-bit integers).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   950
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   951
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   952
     * <code>TIFF_LONG</code> or <code>TIFF_IFD_POINTER</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   953
     * @return The data as an array of {@code long}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   954
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   955
    public long[] getAsLongs() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   956
        return (long[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   957
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   958
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   959
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   960
     * Returns <code>TIFFTag.TIFF_FLOAT</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   961
     * <code>float</code>s (32-bit floating-point values).
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
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   964
     * <code>TIFF_FLOAT</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   965
     * @return The data as an array of {@code float}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   966
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   967
    public float[] getAsFloats() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   968
        return (float[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   969
    }
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
     * Returns <code>TIFFTag.TIFF_DOUBLE</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   973
     * <code>double</code>s (64-bit floating-point values).
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
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   976
     * <code>TIFF_DOUBLE</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   977
     * @return The data as an array of {@code double}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   978
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   979
    public double[] getAsDoubles() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   980
        return (double[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   981
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   982
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   983
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   984
     * Returns <code>TIFFTag.TIFF_SRATIONAL</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   985
     * 2-element arrays of <code>int</code>s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   986
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   987
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   988
     * <code>TIFF_SRATIONAL</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   989
     * @return The data as an array of signed rationals.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   990
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   991
    public int[][] getAsSRationals() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   992
        return (int[][])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   993
    }
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   996
     * Returns <code>TIFFTag.TIFF_RATIONAL</code> data as an array of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   997
     * 2-element arrays of <code>long</code>s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   998
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   999
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1000
     * <code>TIFF_RATIONAL</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1001
     * @return The data as an array of unsigned rationals.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1002
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1003
    public long[][] getAsRationals() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1004
        return (long[][])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1005
    }
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1008
     * Returns data in any format as an <code>int</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1009
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1010
     * <p> <code>TIFFTag.TIFF_BYTE</code> values are treated as unsigned; that
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1011
     * is, no sign extension will take place and the returned value
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1012
     * will be in the range [0, 255].  <code>TIFF_SBYTE</code> data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1013
     * will be returned in the range [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1014
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1015
     * <p> A <code>TIFF_UNDEFINED</code> value is treated as though
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1016
     * it were a <code>TIFF_BYTE</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1017
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1018
     * <p> Data in <code>TIFF_SLONG</code>, <code>TIFF_LONG</code>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1019
     * <code>TIFF_FLOAT</code>, <code>TIFF_DOUBLE</code> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1020
     * <code>TIFF_IFD_POINTER</code> format are simply cast to
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1021
     * <code>int</code> and may suffer from truncation.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1022
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1023
     * <p> Data in <code>TIFF_SRATIONAL</code> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1024
     * <code>TIFF_RATIONAL</code> format are evaluated by dividing the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1025
     * numerator into the denominator using double-precision
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1026
     * arithmetic and then casting to <code>int</code>.  Loss of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1027
     * precision and truncation may occur.
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
     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1030
     * the <code>Double.parseDouble</code> method, with the result
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1031
     * case to <code>int</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1032
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1033
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1034
     * @return The data at the given index as an {@code int}.
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
    public int getAsInt(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1037
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1038
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1039
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1040
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1041
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1042
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1043
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1044
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1045
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1046
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1047
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1048
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1049
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1050
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1051
            return (int)((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1052
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1053
            return (int)((float[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1054
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1055
            return (int)((double[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1056
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1057
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1058
            return (int)((double)ivalue[0]/ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1059
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1060
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1061
            return (int)((double)lvalue[0]/lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1062
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1063
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1064
             return (int)Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1065
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1066
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1067
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1068
    }
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1071
     * Returns data in any format as a <code>long</code>.
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
     * <p> <code>TIFFTag.TIFF_BYTE</code> and <code>TIFF_UNDEFINED</code> data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1074
     * are treated as unsigned; that is, no sign extension will take
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1075
     * place and the returned value will be in the range [0, 255].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1076
     * <code>TIFF_SBYTE</code> data will be returned in the range
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1077
     * [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1078
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1079
     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1080
     * the <code>Double.parseDouble</code> method, with the result
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1081
     * cast to <code>long</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1082
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1083
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1084
     * @return The data at the given index as a {@code long}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1085
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1086
    public long getAsLong(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1087
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1088
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1089
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1090
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1091
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1092
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1093
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1094
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1095
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1096
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1097
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1098
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1099
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1100
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1101
            return ((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1102
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1103
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1104
            return (long)((double)ivalue[0]/ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1105
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1106
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1107
            return (long)((double)lvalue[0]/lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1108
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1109
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1110
             return (long)Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1111
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1112
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1113
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1114
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1115
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
     * Returns data in any format as a <code>float</code>.
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
     * <p> <code>TIFFTag.TIFF_BYTE</code> and <code>TIFF_UNDEFINED</code> data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1120
     * are treated as unsigned; that is, no sign extension will take
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1121
     * place and the returned value will be in the range [0, 255].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1122
     * <code>TIFF_SBYTE</code> data will be returned in the range
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1123
     * [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1124
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1125
     * <p> Data in <code>TIFF_SLONG</code>, <code>TIFF_LONG</code>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1126
     * <code>TIFF_DOUBLE</code>, or <code>TIFF_IFD_POINTER</code> format are
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1127
     * simply cast to <code>float</code> and may suffer from
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1128
     * truncation.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1129
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1130
     * <p> Data in <code>TIFF_SRATIONAL</code> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1131
     * <code>TIFF_RATIONAL</code> format are evaluated by dividing the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1132
     * numerator into the denominator using double-precision
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1133
     * arithmetic and then casting to <code>float</code>.
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
     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1136
     * the <code>Double.parseDouble</code> method, with the result
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1137
     * cast to <code>float</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1138
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1139
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1140
     * @return The data at the given index as a {@code float}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1141
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1142
    public float getAsFloat(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1143
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1144
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1145
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1146
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1147
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1148
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1149
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1150
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1151
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1152
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1153
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1154
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1155
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1156
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1157
            return ((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1158
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1159
            return ((float[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1160
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1161
            return (float)((double[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1162
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1163
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1164
            return (float)((double)ivalue[0]/ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1165
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1166
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1167
            return (float)((double)lvalue[0]/lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1168
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1169
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1170
             return (float)Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1171
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1172
            throw new ClassCastException(); // should never happen
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
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1175
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1176
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1177
     * Returns data in any format as a <code>double</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1178
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1179
     * <p> <code>TIFFTag.TIFF_BYTE</code> and <code>TIFF_UNDEFINED</code> data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1180
     * are treated as unsigned; that is, no sign extension will take
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1181
     * place and the returned value will be in the range [0, 255].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1182
     * <code>TIFF_SBYTE</code> data will be returned in the range
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1183
     * [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1184
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1185
     * <p> Data in <code>TIFF_SRATIONAL</code> or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1186
     * <code>TIFF_RATIONAL</code> format are evaluated by dividing the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1187
     * numerator into the denominator using double-precision
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1188
     * arithmetic.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1189
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1190
     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1191
     * the <code>Double.parseDouble</code> method.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1192
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1193
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1194
     * @return The data at the given index as a {@code double}.
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
    public double getAsDouble(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1197
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1198
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1199
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1200
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1201
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1202
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1203
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1204
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1205
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1206
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1207
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1208
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1209
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1210
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1211
            return ((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1212
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1213
            return ((float[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1214
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1215
            return ((double[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1216
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1217
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1218
            return (double)ivalue[0]/ivalue[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1219
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1220
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1221
            return (double)lvalue[0]/lvalue[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1222
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1223
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1224
             return Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1225
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1226
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1227
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1228
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1229
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
     * Returns a <code>TIFFTag.TIFF_ASCII</code> value as a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1232
     * <code>String</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1233
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1234
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1235
     * <code>TIFF_ASCII</code>.
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
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1238
     * @return The data at the given index as a {@code String}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1239
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1240
    public String getAsString(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1241
        return ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1242
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1243
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1244
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1245
     * Returns a <code>TIFFTag.TIFF_SRATIONAL</code> data item as a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1246
     * two-element array of <code>int</code>s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1247
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1248
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1249
     * @return The data at the given index as a signed rational.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1250
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1251
     * <code>TIFF_SRATIONAL</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1252
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1253
    public int[] getAsSRational(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1254
        return ((int[][])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1255
    }
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1258
     * Returns a TIFFTag.TIFF_RATIONAL data item as a two-element array
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1259
     * of ints.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1260
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1261
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1262
     * @return The data at the given index as an unsigned rational.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1263
     * @throws ClassCastException if the field is not of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1264
     * <code>TIFF_RATIONAL</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1265
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1266
    public long[] getAsRational(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1267
        return ((long[][])data)[index];
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
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
     * Returns a <code>String</code> containing a human-readable
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1273
     * version of the data item.  Data of type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1274
     * <code>TIFFTag.TIFF_RATIONAL</code> or <code>TIFF_SRATIONAL</code> are
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1275
     * represented as a pair of integers separated by a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1276
     * <code>'/'</code> character.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1277
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1278
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1279
     * @return The data at the given index as a {@code String}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1280
     * @throws ClassCastException if the field is not of one of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1281
     * legal field types.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1282
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1283
    public String getValueAsString(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1284
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1285
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1286
            return ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1287
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1288
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1289
            return Integer.toString(((byte[])data)[index] & 0xff);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1290
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1291
            return Integer.toString(((byte[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1292
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1293
            return Integer.toString(((char[])data)[index] & 0xffff);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1294
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1295
            return Integer.toString(((short[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1296
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1297
            return Integer.toString(((int[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1298
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1299
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1300
            return Long.toString(((long[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1301
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1302
            return Float.toString(((float[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1303
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1304
            return Double.toString(((double[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1305
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1306
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1307
            String srationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1308
            if(ivalue[1] != 0 && ivalue[0] % ivalue[1] == 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1309
                // If the denominator is a non-zero integral divisor
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1310
                // of the numerator then convert the fraction to be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1311
                // with respect to a unity denominator.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1312
                srationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1313
                    Integer.toString(ivalue[0] / ivalue[1]) + "/1";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1314
            } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1315
                // Use the values directly.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1316
                srationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1317
                    Integer.toString(ivalue[0]) +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1318
                    "/" +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1319
                    Integer.toString(ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1320
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1321
            return srationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1322
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1323
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1324
            String rationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1325
            if(lvalue[1] != 0L && lvalue[0] % lvalue[1] == 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1326
                // If the denominator is a non-zero integral divisor
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1327
                // of the numerator then convert the fraction to be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1328
                // with respect to a unity denominator.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1329
                rationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1330
                    Long.toString(lvalue[0] / lvalue[1]) + "/1";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1331
            } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1332
                // Use the values directly.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1333
                rationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1334
                    Long.toString(lvalue[0]) +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1335
                    "/" +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1336
                    Long.toString(lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1337
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1338
            return rationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1339
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1340
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1341
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1342
    }
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
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1345
     * Returns whether the field has a <code>TIFFDirectory</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1346
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1347
     * @return true if and only if getDirectory() returns non-null.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1348
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1349
    public boolean hasDirectory() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1350
        return getDirectory() != null;
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
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1353
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1354
     * Returns the associated <code>TIFFDirectory</code>, if available. If no
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1355
     * directory is set, then <code>null</code> will be returned.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1356
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1357
     * @return the TIFFDirectory instance or null.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1358
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1359
    public TIFFDirectory getDirectory() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1360
        return dir;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1361
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1362
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1363
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1364
     * Clones the field and all the information contained therein.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1365
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1366
     * @return A clone of this <code>TIFFField</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1367
     * @throws CloneNotSupportedException if the instance cannot be cloned.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1368
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1369
    @Override
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1370
    public TIFFField clone() throws CloneNotSupportedException {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1371
        TIFFField field = (TIFFField)super.clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1372
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1373
        Object fieldData;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1374
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1375
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1376
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1377
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1378
            fieldData = ((byte[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1379
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1380
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1381
            fieldData = ((char[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1382
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1383
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1384
            fieldData = ((short[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1385
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1386
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1387
            fieldData = ((int[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1388
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1389
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1390
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1391
            fieldData = ((long[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1392
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1393
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1394
            fieldData = ((float[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1395
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1396
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1397
            fieldData = ((double[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1398
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1399
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1400
            fieldData = ((int[][])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1401
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1402
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1403
            fieldData = ((long[][])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1404
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1405
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1406
            fieldData = ((String[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1407
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1408
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1409
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1410
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1411
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1412
        field.tag = tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1413
        field.tagNumber = tagNumber;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1414
        field.type = type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1415
        field.count = count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1416
        field.data = fieldData;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1417
        field.dir = dir != null ? dir.clone() : null;
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
        return field;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1420
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1421
}