Skip to main content

RE: [JAI-IMAGEIO] TIFF reader exception: width*height > Integer.MAX_VALUE, bug or feature?

1 reply [Last post]
Anonymous

>>> mike.nidel@lmco.com 12.12.2007 21:15:12 >>>
>>>ok, refresh my memory again: what's the exact spot where you get
the
>>>exception from? it's not after readAsRenderedImage() right?

The exception happens when the code tries to write out the subsampled
image.

The complete test case and exception trace follows, plus I've include
the 'tiffinfo' dump for the test file I'm using.

Note that the test code reads in the image with
reader.readAsRenderedImage(7, readParam); because the large
image is the last image on that particular tiff. Of course '7' would
not work for the subsequent calls to 'subit' but
the code never gets that far with this image.

br Kusti

java.lang.IllegalArgumentException: width*height > Integer.MAX_VALUE!
at
javax.imageio.ImageReader.getDestination(ImageReader.java:2823)
at
com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1170)
at
com.sun.media.imageioimpl.plugins.tiff.TIFFRenderedImage.read(TIFFRenderedImage.java:259)
at
com.sun.media.imageioimpl.plugins.tiff.TIFFRenderedImage.copyData(TIFFRenderedImage.java:274)
at
javax.media.jai.RenderedImageAdapter.copyData(RenderedImageAdapter.java:171)
at
javax.media.jai.PlanarImage.copyExtendedData(PlanarImage.java:2411)
at
com.sun.media.jai.opimage.BorderOpImage.computeTile(BorderOpImage.java:220)
at
com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:912)
at javax.media.jai.OpImage.getTile(OpImage.java:1139)
at
javax.media.jai.PlanarImage.cobbleByte(PlanarImage.java:2863)
at javax.media.jai.PlanarImage.getData(PlanarImage.java:2182)
at
javax.media.jai.GeometricOpImage.computeTile(GeometricOpImage.java:676)
at
com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:912)
at javax.media.jai.OpImage.getTile(OpImage.java:1139)
at
javax.media.jai.PlanarImage.cobbleByte(PlanarImage.java:2863)
at javax.media.jai.PlanarImage.getData(PlanarImage.java:2182)
at javax.media.jai.RenderedOp.getData(RenderedOp.java:2287)
at
com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.writeTile(TIFFImageWriter.java:1754)
at
com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.write(TIFFImageWriter.java:2686)
at
com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.write(TIFFImageWriter.java:2417)
at renderer.SubSampleTest2.subit(SubSampleTest2.java:94)
at renderer.SubSampleTest2.main(SubSampleTest2.java:21)

package renderer;

import java.io.*;
import javax.imageio.*;
import javax.imageio.stream.*;
import javax.media.jai.*;
import javax.imageio.metadata.*;

import com.sun.media.imageio.plugins.tiff.*;
import com.sun.media.jai.codec.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.image.renderable.*;

import javax.imageio.metadata.*;

public class SubSampleTest2 {
public static void main(String args[]) {
try {
subit(new File("./images/world.tif"), new
File("r0.tif"));
subit(new File("r0.tif"), new File("r1.tif"));
subit(new File("r1.tif"), new File("r2.tif"));
subit(new File("r2.tif"), new File("r3.tif"));
subit(new File("r3.tif"), new
File("test-out.tif"));
} catch (Throwable e) {
e.printStackTrace();
}
}

public static void subit(File sourceFile, File destFile) throws
IOException {
long t0 = System.nanoTime();

FileImageOutputStream outputStream = new
FileImageOutputStream(destFile);
ImageWriter writer =
ImageIO.getImageWritersByFormatName("tiff").next();

FileImageInputStream inputStream = new
FileImageInputStream(sourceFile);
ImageReader reader = ImageIO.getImageReader(writer);
reader.setInput(inputStream);

IIOMetadata metadata = reader.getImageMetadata(0);

ImageReadParam readParam =
reader.getDefaultReadParam();
RenderedImage inputImg = reader.readAsRenderedImage(7,
readParam);

ParameterBlock pb;

ImageLayout tileLayout = new ImageLayout(inputImg);
tileLayout.setTileWidth(256);
tileLayout.setTileHeight(256);
RenderingHints tileHints = new
RenderingHints(JAI.KEY_IMAGE_LAYOUT, tileLayout);

pb = new ParameterBlock();
pb.addSource(inputImg);
inputImg = JAI.create("format", pb, tileHints);

pb.addSource(inputImg);
pb.add(1);
pb.add(1);
pb.add(1);
pb.add(1);
pb.add(BorderExtender.createInstance(BorderExtender.BORDER_COPY));
pb.add(0);
inputImg= JAI.create("border", pb);

pb = new ParameterBlock();
pb.addSource(inputImg);
pb.add(2).add(2);
pb.add(new float[] { 0.5F, 1.0F / 3.0F, 0.0F, -1.0F /
12.0F ,2});
pb.add(Interpolation.getInstance(Interpolation.INTERP_BICUBIC_2));
inputImg = JAI.create("filteredsubsample", pb);

writer.setOutput(outputStream);

TIFFImageWriteParam writeParam = (TIFFImageWriteParam)
writer.getDefaultWriteParam();
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("PackBits");
writeParam.setTilingMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setTiling(256, 256, 0, 0);

IIOImage iioImage = new IIOImage(inputImg, null,
metadata);
//writer.prepareWriteSequence(metadata);
writer.write(metadata, iioImage, writeParam);
//writer.endWriteSequence();

JAI.getDefaultInstance().getTileCache().flush();
writer.dispose();
outputStream.flush();
outputStream.close();

reader.dispose();
inputStream.flush();
inputStream.close();

System.out.println("sub image " + inputImg.getWidth() +
"x" + inputImg.getHeight() + " time " + (System.nanoTime() - t0) /
1000000 / 1000.0 + " sec");

System.out.println("DONE!");
}
}

TIFF Directory at offset 0x1759a
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 675 Image Length: 337
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Copyright: "Frederic Delhoume"
Image Description: ""
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
Software: Very Large Image Viewer
JPEG Tables: (289 bytes)
TIFF Directory at offset 0x4d9e4
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 1350 Image Length: 675
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)
TIFF Directory at offset 0xf2cb2
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 2700 Image Length: 1350
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)
TIFF Directory at offset 0x2f50ee
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 5400 Image Length: 2700
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)
TIFF Directory at offset 0x9d4a56
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 10800 Image Length: 5400
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)
TIFF Directory at offset 0x214a4ee
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 21600 Image Length: 10800
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)
TIFF Directory at offset 0x7351000
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 43200 Image Length: 21600
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)
TIFF Directory at offset 0x197568b8
Image Width: 86400 Image Length: 43200
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
YCbCr Subsampling: 2, 2
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (289 bytes)

---------------------------------------------------------------------
To unsubscribe, e-mail: interest-unsubscribe@jai-imageio.dev.java.net
For additional commands, e-mail: interest-help@jai-imageio.dev.java.net

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Nidel, Mike

You must have missed my reply last week. I think I have a way for you to
debug this. You need to get a hold of the LAST image in your chain
before
writing to disk. Check if this image is tiled -- do a getTileWidth() and
getTileHeight() and see if they match your expectations.

My strong suspicion is that your operation chain is constructed in such
a way that you are untiling the image. If you want to be very thorough,
print the tile sizes for every RenderedImage/RenderedOp in the chain.
If the tile size jumps up at some point, you should set the desired tile
size in that op by passing in an ImageLayout on the RenderingHints under
JAI.KEY_IMAGE_LAYOUT.

> -----Original Message-----
> From: Kustaa Nyholm [mailto:Kustaa.Nyholm@planmeca.com]
> Sent: Wednesday, December 12, 2007 3:08 PM
> To: interest@jai-imageio.dev.java.net
> Subject: RE: [JAI-IMAGEIO] TIFF reader exception:
> width*height > Integer.MAX_VALUE, bug or feature?
>
>
>
> >>> mike.nidel@lmco.com 12.12.2007 21:15:12 >>> ok, refresh my memory
> >>>again: what's the exact spot where you get
> the
> >>>exception from? it's not after readAsRenderedImage() right?
>
> The exception happens when the code tries to write out the
> subsampled image.
>
> The complete test case and exception trace follows, plus I've
> include the 'tiffinfo' dump for the test file I'm using.
>
> Note that the test code reads in the image with
> reader.readAsRenderedImage(7, readParam); because the large
> image is the last image on that particular tiff. Of course
> '7' would not work for the subsequent calls to 'subit' but
> the code never gets that far with this image.
>
> br Kusti
>
>
>
>
>
>
>
> java.lang.IllegalArgumentException: width*height > Integer.MAX_VALUE!
> at
> javax.imageio.ImageReader.getDestination(ImageReader.java:2823)
> at
> com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TI
> FFImageReader.java:1170)
> at
> com.sun.media.imageioimpl.plugins.tiff.TIFFRenderedImage.read(
> TIFFRenderedImage.java:259)
> at
> com.sun.media.imageioimpl.plugins.tiff.TIFFRenderedImage.copyD
> ata(TIFFRenderedImage.java:274)
> at
> javax.media.jai.RenderedImageAdapter.copyData(RenderedImageAda
> pter.java:171)
> at
> javax.media.jai.PlanarImage.copyExtendedData(PlanarImage.java:2411)
> at
> com.sun.media.jai.opimage.BorderOpImage.computeTile(BorderOpIm
> age.java:220)
> at
> com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileSc
> heduler.java:912)
> at javax.media.jai.OpImage.getTile(OpImage.java:1139)
> at
> javax.media.jai.PlanarImage.cobbleByte(PlanarImage.java:2863)
> at javax.media.jai.PlanarImage.getData(PlanarImage.java:2182)
> at
> javax.media.jai.GeometricOpImage.computeTile(GeometricOpImage.
> java:676)
> at
> com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileSc
> heduler.java:912)
> at javax.media.jai.OpImage.getTile(OpImage.java:1139)
> at
> javax.media.jai.PlanarImage.cobbleByte(PlanarImage.java:2863)
> at javax.media.jai.PlanarImage.getData(PlanarImage.java:2182)
> at javax.media.jai.RenderedOp.getData(RenderedOp.java:2287)
> at
> com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.writeTi
> le(TIFFImageWriter.java:1754)
> at
> com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.write(T
> IFFImageWriter.java:2686)
> at
> com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.write(T
> IFFImageWriter.java:2417)
> at renderer.SubSampleTest2.subit(SubSampleTest2.java:94)
> at renderer.SubSampleTest2.main(SubSampleTest2.java:21)
>
>
> package renderer;
>
> import java.io.*;
> import javax.imageio.*;
> import javax.imageio.stream.*;
> import javax.media.jai.*;
> import javax.imageio.metadata.*;
>
> import com.sun.media.imageio.plugins.tiff.*;
> import com.sun.media.jai.codec.*;
> import java.util.*;
> import java.awt.*;
> import java.awt.image.*;
> import java.awt.image.renderable.*;
>
> import javax.imageio.metadata.*;
>
> public class SubSampleTest2 {
> public static void main(String args[]) {
> try {
> subit(new File("./images/world.tif"),
> new File("r0.tif"));
> subit(new File("r0.tif"), new File("r1.tif"));
> subit(new File("r1.tif"), new File("r2.tif"));
> subit(new File("r2.tif"), new File("r3.tif"));
> subit(new File("r3.tif"), new
> File("test-out.tif"));
> } catch (Throwable e) {
> e.printStackTrace();
> }
> }
>
> public static void subit(File sourceFile, File
> destFile) throws IOException {
> long t0 = System.nanoTime();
>
> FileImageOutputStream outputStream = new
> FileImageOutputStream(destFile);
> ImageWriter writer =
> ImageIO.getImageWritersByFormatName("tiff").next();
>
> FileImageInputStream inputStream = new
> FileImageInputStream(sourceFile);
> ImageReader reader = ImageIO.getImageReader(writer);
> reader.setInput(inputStream);
>
> IIOMetadata metadata = reader.getImageMetadata(0);
>
> ImageReadParam readParam =
> reader.getDefaultReadParam();
> RenderedImage inputImg =
> reader.readAsRenderedImage(7, readParam);
>
> ParameterBlock pb;
>
> ImageLayout tileLayout = new ImageLayout(inputImg);
> tileLayout.setTileWidth(256);
> tileLayout.setTileHeight(256);
> RenderingHints tileHints = new
> RenderingHints(JAI.KEY_IMAGE_LAYOUT, tileLayout);
>
> pb = new ParameterBlock();
> pb.addSource(inputImg);
> inputImg = JAI.create("format", pb, tileHints);
>
> pb.addSource(inputImg);
> pb.add(1);
> pb.add(1);
> pb.add(1);
> pb.add(1);
>
> pb.add(BorderExtender.createInstance(BorderExtender.BORDER_COPY));
> pb.add(0);
> inputImg= JAI.create("border", pb);
>
> pb = new ParameterBlock();
> pb.addSource(inputImg);
> pb.add(2).add(2);
> pb.add(new float[] { 0.5F, 1.0F / 3.0F, 0.0F,
> -1.0F / 12.0F ,2});
>
> pb.add(Interpolation.getInstance(Interpolation.INTERP_BICUBIC_2));
> inputImg = JAI.create("filteredsubsample", pb);
>
> writer.setOutput(outputStream);
>
> TIFFImageWriteParam writeParam =
> (TIFFImageWriteParam) writer.getDefaultWriteParam();
>
> writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
> writeParam.setCompressionType("PackBits");
> writeParam.setTilingMode(ImageWriteParam.MODE_EXPLICIT);
> writeParam.setTiling(256, 256, 0, 0);
>
> IIOImage iioImage = new IIOImage(inputImg,
> null, metadata);
> //writer.prepareWriteSequence(metadata);
> writer.write(metadata, iioImage, writeParam);
> //writer.endWriteSequence();
>
> JAI.getDefaultInstance().getTileCache().flush();
> writer.dispose();
> outputStream.flush();
> outputStream.close();
>
> reader.dispose();
> inputStream.flush();
> inputStream.close();
>
> System.out.println("sub image " +
> inputImg.getWidth() + "x" + inputImg.getHeight() + " time " +
> (System.nanoTime() - t0) / 1000000 / 1000.0 + " sec");
>
> System.out.println("DONE!");
> }
> }
>
>
> TIFF Directory at offset 0x1759a
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 675 Image Length: 337
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Copyright: "Frederic Delhoume"
> Image Description: ""
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> Software: Very Large Image Viewer
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0x4d9e4
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 1350 Image Length: 675
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0xf2cb2
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 2700 Image Length: 1350
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0x2f50ee
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 5400 Image Length: 2700
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0x9d4a56
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 10800 Image Length: 5400
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0x214a4ee
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 21600 Image Length: 10800
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0x7351000
> Subfile Type: reduced-resolution image (1 = 0x1)
> Image Width: 43200 Image Length: 21600
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
> TIFF Directory at offset 0x197568b8
> Image Width: 86400 Image Length: 43200
> Tile Width: 256 Tile Length: 256
> Bits/Sample: 8
> Compression Scheme: JPEG
> Photometric Interpretation: RGB color
> YCbCr Subsampling: 2, 2
> Orientation: row 0 top, col 0 lhs
> Samples/Pixel: 3
> Planar Configuration: single image plane
> JPEG Tables: (289 bytes)
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: interest-unsubscribe@jai-imageio.dev.java.net
> For additional commands, e-mail:
> interest-help@jai-imageio.dev.java.net
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: interest-unsubscribe@jai-imageio.dev.java.net
For additional commands, e-mail: interest-help@jai-imageio.dev.java.net