author | bpb |
Mon, 23 Nov 2015 12:26:12 -0800 | |
changeset 34416 | 68c0d866db5d |
child 36448 | a07e108d5722 |
permissions | -rw-r--r-- |
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 com.sun.imageio.plugins.tiff; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
26 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
27 |
import java.io.EOFException; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
28 |
import java.io.IOException; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
29 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
30 |
public class TIFFNullDecompressor extends TIFFDecompressor { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
31 |
|
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 |
* Whether to read the active source region only. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
34 |
*/ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
35 |
private boolean isReadActiveOnly = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
36 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
37 |
/** The original value of <code>srcMinX</code>. */ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
38 |
private int originalSrcMinX; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
39 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
40 |
/** The original value of <code>srcMinY</code>. */ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
41 |
private int originalSrcMinY; |
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 |
/** The original value of <code>srcWidth</code>. */ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
44 |
private int originalSrcWidth; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
45 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
46 |
/** The original value of <code>srcHeight</code>. */ |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
47 |
private int originalSrcHeight; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
48 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
49 |
public TIFFNullDecompressor() {} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
50 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
51 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
52 |
// This approach to reading the active region is a not the best |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
53 |
// as the original values of the entire source region are stored, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
54 |
// overwritten, and then restored. It would probably be better to |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
55 |
// revise TIFFDecompressor such that this were not necessary, i.e., |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
56 |
// change beginDecoding() and decode() to use the active region values |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
57 |
// when random access is easy and the entire region values otherwise. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
58 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
59 |
public void beginDecoding() { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
60 |
// Determine number of bits per pixel. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
61 |
int bitsPerPixel = 0; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
62 |
for(int i = 0; i < bitsPerSample.length; i++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
63 |
bitsPerPixel += bitsPerSample[i]; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
64 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
65 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
66 |
// Can read active region only if row starts on a byte boundary. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
67 |
if((activeSrcMinX != srcMinX || activeSrcMinY != srcMinY || |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
68 |
activeSrcWidth != srcWidth || activeSrcHeight != srcHeight) && |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
69 |
((activeSrcMinX - srcMinX)*bitsPerPixel) % 8 == 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
70 |
// Set flag. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
71 |
isReadActiveOnly = true; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
72 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
73 |
// Cache original region. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
74 |
originalSrcMinX = srcMinX; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
75 |
originalSrcMinY = srcMinY; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
76 |
originalSrcWidth = srcWidth; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
77 |
originalSrcHeight = srcHeight; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
78 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
79 |
// Replace region with active region. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
80 |
srcMinX = activeSrcMinX; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
81 |
srcMinY = activeSrcMinY; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
82 |
srcWidth = activeSrcWidth; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
83 |
srcHeight = activeSrcHeight; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
84 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
85 |
// Clear flag. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
86 |
isReadActiveOnly = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
87 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
88 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
89 |
super.beginDecoding(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
90 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
91 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
92 |
public void decode() throws IOException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
93 |
super.decode(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
94 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
95 |
// Reset state. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
96 |
if(isReadActiveOnly) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
97 |
// Restore original source region values. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
98 |
srcMinX = originalSrcMinX; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
99 |
srcMinY = originalSrcMinY; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
100 |
srcWidth = originalSrcWidth; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
101 |
srcHeight = originalSrcHeight; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
102 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
103 |
// Unset flag. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
104 |
isReadActiveOnly = false; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
105 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
106 |
} |
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 |
public void decodeRaw(byte[] b, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
109 |
int dstOffset, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
110 |
int bitsPerPixel, |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
111 |
int scanlineStride) throws IOException { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
112 |
if(isReadActiveOnly) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
113 |
// Read the active source region only. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
114 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
115 |
int activeBytesPerRow = (activeSrcWidth*bitsPerPixel + 7)/8; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
116 |
int totalBytesPerRow = (originalSrcWidth*bitsPerPixel + 7)/8; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
117 |
int bytesToSkipPerRow = totalBytesPerRow - activeBytesPerRow; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
118 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
119 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
120 |
// Seek to the start of the active region: |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
121 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
122 |
// active offset = original offset + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
123 |
// number of bytes to start of first active row + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
124 |
// number of bytes to first active pixel within row |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
125 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
126 |
// Since the condition for reading from the active region only is |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
127 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
128 |
// ((activeSrcMinX - srcMinX)*bitsPerPixel) % 8 == 0 |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
129 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
130 |
// the bit offset to the first active pixel within the first |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
131 |
// active row is a multiple of 8. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
132 |
// |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
133 |
stream.seek(offset + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
134 |
(activeSrcMinY - originalSrcMinY)*totalBytesPerRow + |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
135 |
((activeSrcMinX - originalSrcMinX)*bitsPerPixel)/8); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
136 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
137 |
int lastRow = activeSrcHeight - 1; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
138 |
for (int y = 0; y < activeSrcHeight; y++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
139 |
int bytesRead = stream.read(b, dstOffset, activeBytesPerRow); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
140 |
if (bytesRead < 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
141 |
throw new EOFException(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
142 |
} else if (bytesRead != activeBytesPerRow) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
143 |
break; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
144 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
145 |
dstOffset += scanlineStride; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
146 |
|
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
147 |
// Skip unneeded bytes (row suffix + row prefix). |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
148 |
if(y != lastRow) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
149 |
stream.skipBytes(bytesToSkipPerRow); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
150 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
151 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
152 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
153 |
// Read the entire source region. |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
154 |
stream.seek(offset); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
155 |
int bytesPerRow = (srcWidth*bitsPerPixel + 7)/8; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
156 |
if(bytesPerRow == scanlineStride) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
157 |
if (stream.read(b, dstOffset, bytesPerRow*srcHeight) < 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
158 |
throw new EOFException(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
159 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
160 |
} else { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
161 |
for (int y = 0; y < srcHeight; y++) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
162 |
int bytesRead = stream.read(b, dstOffset, bytesPerRow); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
163 |
if (bytesRead < 0) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
164 |
throw new EOFException(); |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
165 |
} else if (bytesRead != bytesPerRow) { |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
166 |
break; |
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 |
dstOffset += scanlineStride; |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
169 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
170 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
171 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
172 |
} |
68c0d866db5d
8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff
changeset
|
173 |
} |