src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java

Print this page
rev 9230 : imported patch 8033716

*** 70,80 **** GIFImageMetadata imageMetadata = null; // A List of Longs indicating the stream positions of the // start of the metadata for each image. Entries are added // as needed. ! List imageStartPosition = new ArrayList(); // Length of metadata for image at 'currIndex', valid only if // imageMetadata != null. int imageMetadataLength; --- 70,80 ---- GIFImageMetadata imageMetadata = null; // A List of Longs indicating the stream positions of the // start of the metadata for each image. Entries are added // as needed. ! List<Long> imageStartPosition = new ArrayList<>(); // Length of metadata for image at 'currIndex', valid only if // imageMetadata != null. int imageMetadataLength;
*** 225,244 **** 1, 1, bits); } return new ImageTypeSpecifier(colorModel, sampleModel); } ! public Iterator getImageTypes(int imageIndex) throws IIOException { checkIndex(imageIndex); int index = locateImage(imageIndex); if (index != imageIndex) { throw new IndexOutOfBoundsException(); } readMetadata(); ! List l = new ArrayList(1); byte[] colorTable; if (imageMetadata.localColorTable != null) { colorTable = imageMetadata.localColorTable; fallbackColorTable = imageMetadata.localColorTable; --- 225,244 ---- 1, 1, bits); } return new ImageTypeSpecifier(colorModel, sampleModel); } ! public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IIOException { checkIndex(imageIndex); int index = locateImage(imageIndex); if (index != imageIndex) { throw new IndexOutOfBoundsException(); } readMetadata(); ! List<ImageTypeSpecifier> l = new ArrayList<>(1); byte[] colorTable; if (imageMetadata.localColorTable != null) { colorTable = imageMetadata.localColorTable; fallbackColorTable = imageMetadata.localColorTable;
*** 603,613 **** try { // Find closest known index int index = Math.min(imageIndex, imageStartPosition.size() - 1); // Seek to that position ! Long l = (Long)imageStartPosition.get(index); stream.seek(l.longValue()); // Skip images until at desired index or last image found while (index < imageIndex) { if (!skipImage()) { --- 603,613 ---- try { // Find closest known index int index = Math.min(imageIndex, imageStartPosition.size() - 1); // Seek to that position ! Long l = imageStartPosition.get(index); stream.seek(l.longValue()); // Skip images until at desired index or last image found while (index < imageIndex) { if (!skipImage()) {
*** 729,739 **** stream.readUnsignedByte(); imageMetadata.text = concatenateBlocks(); } else if (label == 0xfe) { // Comment extension byte[] comment = concatenateBlocks(); if (imageMetadata.comments == null) { ! imageMetadata.comments = new ArrayList(); } imageMetadata.comments.add(comment); } else if (label == 0xff) { // Application extension int blockSize = stream.readUnsignedByte(); byte[] applicationID = new byte[8]; --- 729,739 ---- stream.readUnsignedByte(); imageMetadata.text = concatenateBlocks(); } else if (label == 0xfe) { // Comment extension byte[] comment = concatenateBlocks(); if (imageMetadata.comments == null) { ! imageMetadata.comments = new ArrayList<>(); } imageMetadata.comments.add(comment); } else if (label == 0xff) { // Application extension int blockSize = stream.readUnsignedByte(); byte[] applicationID = new byte[8];
*** 760,773 **** applicationData = data; } // Init lists if necessary if (imageMetadata.applicationIDs == null) { ! imageMetadata.applicationIDs = new ArrayList(); imageMetadata.authenticationCodes = ! new ArrayList(); ! imageMetadata.applicationData = new ArrayList(); } imageMetadata.applicationIDs.add(applicationID); imageMetadata.authenticationCodes.add(authCode); imageMetadata.applicationData.add(applicationData); } else { --- 760,773 ---- applicationData = data; } // Init lists if necessary if (imageMetadata.applicationIDs == null) { ! imageMetadata.applicationIDs = new ArrayList<>(); imageMetadata.authenticationCodes = ! new ArrayList<>(); ! imageMetadata.applicationData = new ArrayList<>(); } imageMetadata.applicationIDs.add(applicationID); imageMetadata.authenticationCodes.add(authCode); imageMetadata.applicationData.add(applicationData); } else {
*** 866,876 **** if (param == null) { param = getDefaultReadParam(); } // Initialize the destination image ! Iterator imageTypes = getImageTypes(imageIndex); this.theImage = getDestination(param, imageTypes, imageMetadata.imageWidth, imageMetadata.imageHeight); this.theTile = theImage.getWritableTile(0, 0); --- 866,876 ---- if (param == null) { param = getDefaultReadParam(); } // Initialize the destination image ! Iterator<ImageTypeSpecifier> imageTypes = getImageTypes(imageIndex); this.theImage = getDestination(param, imageTypes, imageMetadata.imageWidth, imageMetadata.imageHeight); this.theTile = theImage.getWritableTile(0, 0);
*** 1029,1039 **** private void resetStreamSettings() { gotHeader = false; streamMetadata = null; currIndex = -1; imageMetadata = null; ! imageStartPosition = new ArrayList(); numImages = -1; // No need to reinitialize 'block' blockLength = 0; bitPos = 0; --- 1029,1039 ---- private void resetStreamSettings() { gotHeader = false; streamMetadata = null; currIndex = -1; imageMetadata = null; ! imageStartPosition = new ArrayList<>(); numImages = -1; // No need to reinitialize 'block' blockLength = 0; bitPos = 0;