javax.imageio.metadata.IIOMetadataNode#getElementsByTagName ( )源码实例Demo

下面列出了javax.imageio.metadata.IIOMetadataNode#getElementsByTagName ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: tess4j   文件: ImageIOHelper.java
/**
 * Reads image meta data.
 *
 * @param oimage
 * @return a map of meta data
 */
public static Map<String, String> readImageData(IIOImage oimage) {
    Map<String, String> dict = new HashMap<String, String>();

    IIOMetadata imageMetadata = oimage.getMetadata();
    if (imageMetadata != null) {
        IIOMetadataNode dimNode = (IIOMetadataNode) imageMetadata.getAsTree("javax_imageio_1.0");
        NodeList nodes = dimNode.getElementsByTagName("HorizontalPixelSize");
        int dpiX;
        if (nodes.getLength() > 0) {
            float dpcWidth = Float.parseFloat(nodes.item(0).getAttributes().item(0).getNodeValue());
            dpiX = (int) Math.round(25.4f / dpcWidth);
        } else {
            dpiX = Toolkit.getDefaultToolkit().getScreenResolution();
        }
        dict.put("dpiX", String.valueOf(dpiX));

        nodes = dimNode.getElementsByTagName("VerticalPixelSize");
        int dpiY;
        if (nodes.getLength() > 0) {
            float dpcHeight = Float.parseFloat(nodes.item(0).getAttributes().item(0).getNodeValue());
            dpiY = (int) Math.round(25.4f / dpcHeight);
        } else {
            dpiY = Toolkit.getDefaultToolkit().getScreenResolution();
        }
        dict.put("dpiY", String.valueOf(dpiY));
    }

    return dict;
}
 
源代码2 项目: hortonmachine   文件: ExifReader.java
@SuppressWarnings("nls")
private void parseExifMeta( IIOMetadata exifMeta ) {
    outTags = new HashMap<String, ExifTag>();

    IIOMetadataNode root = (IIOMetadataNode) exifMeta.getAsTree("com_sun_media_imageio_plugins_tiff_image_1.0");

    NodeList imageDirectories = root.getElementsByTagName("TIFFIFD");
    for( int i = 0; i < imageDirectories.getLength(); i++ ) {
        IIOMetadataNode directory = (IIOMetadataNode) imageDirectories.item(i);

        NodeList tiffTags = directory.getElementsByTagName("TIFFField");
        for( int j = 0; j < tiffTags.getLength(); j++ ) {
            IIOMetadataNode tag = (IIOMetadataNode) tiffTags.item(j);

            String tagNumber = tag.getAttribute("number");
            String tagName = tag.getAttribute("name");
            String tagValue;

            StringBuilder tmp = new StringBuilder();
            IIOMetadataNode values = (IIOMetadataNode) tag.getFirstChild();

            if ("TIFFUndefined".equals(values.getNodeName())) {
                tmp.append(values.getAttribute("value"));
            } else {
                NodeList tiffNumbers = values.getChildNodes();
                for( int k = 0; k < tiffNumbers.getLength(); k++ ) {
                    tmp.append(((IIOMetadataNode) tiffNumbers.item(k)).getAttribute("value"));
                    tmp.append(",");
                }
                tmp.deleteCharAt(tmp.length() - 1);
            }

            tagValue = tmp.toString();

            ExifTag exifTag = new ExifTag(tagName, tagNumber, tagValue);
            outTags.put(tagName, exifTag);
        }
    }
}
 
源代码3 项目: hortonmachine   文件: ExifGpsWriter.java
/**
 * Main method to write the gps data to the exif 
 * @param gps - gps position to be added
 * @throws IOException 
 */
private void writeExif() throws IOException {

    IIOMetadata metadata = jpegReader.getImageMetadata(0);

    // names says which exif tree to get - 0 for jpeg 1 for the default
    String[] names = metadata.getMetadataFormatNames();
    IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(names[0]);

    // exif is on the app1 node called unknown
    NodeList nList = root.getElementsByTagName("unknown");
    IIOMetadataNode app1EXIFNode = (IIOMetadataNode) nList.item(0);
    ArrayList<IIOMetadata> md = readExif(app1EXIFNode);
    IIOMetadata exifMetadata = md.get(0);

    // insert the gps data into the exif
    exifMetadata = insertGPSCoords(exifMetadata);

    // create a new exif node
    IIOMetadataNode app1NodeNew = createNewExifNode(exifMetadata, null, null);

    // copy the user data accross
    app1EXIFNode.setUserObject(app1NodeNew.getUserObject());

    // write to a new image file
    FileImageOutputStream out1 = new FileImageOutputStream(new File("GPS_" + imageFile.getName()));
    jpegWriter.setOutput(out1);
    metadata.setFromTree(names[0], root);

    IIOImage image = new IIOImage(jpegReader.readAsRenderedImage(0, jpegReader.getDefaultReadParam()), null, metadata);

    // write out the new image
    jpegWriter.write(jpegReader.getStreamMetadata(), image, jpegWriter.getDefaultWriteParam());

}
 
源代码4 项目: jdk1.8-source-analysis   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码5 项目: dragonwell8_jdk   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码6 项目: TencentKona-8   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码7 项目: jdk8u60   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码8 项目: JDKSourceCode1.8   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码9 项目: openjdk-jdk8u   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码10 项目: openjdk-jdk8u-backup   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码11 项目: Bytecoder   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param image The image.
 * @param imageMetadata The image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码12 项目: openjdk-jdk9   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param image The image.
 * @param imageMetadata The image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码13 项目: jdk8u-jdk   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码14 项目: hottub   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码15 项目: openjdk-8-source   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码16 项目: openjdk-8   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码17 项目: jdk8u_jdk   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码18 项目: jdk8u-jdk   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}
 
源代码19 项目: jdk8u-dev-jdk   文件: GIFImageWriter.java
/**
 * Writes any extension blocks, the Image Descriptor, and the image data
 *
 * @param iioimage The image and image metadata.
 * @param param The write parameters.
 * @param globalColorTable The Global Color Table.
 * @param sourceBounds The source region.
 * @param destSize The destination dimensions.
 */
private void writeImage(RenderedImage image,
                        GIFWritableImageMetadata imageMetadata,
                        ImageWriteParam param, byte[] globalColorTable,
                        Rectangle sourceBounds, Dimension destSize)
  throws IOException {
    ColorModel colorModel = image.getColorModel();
    SampleModel sampleModel = image.getSampleModel();

    boolean writeGraphicsControlExtension;
    if (imageMetadata == null) {
        // Create default metadata.
        imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
            new ImageTypeSpecifier(image), param);

        // Set GraphicControlExtension flag only if there is
        // transparency.
        writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
    } else {
        // Check for GraphicControlExtension element.
        NodeList list = null;
        try {
            IIOMetadataNode root = (IIOMetadataNode)
                imageMetadata.getAsTree(IMAGE_METADATA_NAME);
            list = root.getElementsByTagName("GraphicControlExtension");
        } catch(IllegalArgumentException iae) {
            // Should never happen.
        }

        // Set GraphicControlExtension flag if element present.
        writeGraphicsControlExtension =
            list != null && list.getLength() > 0;

        // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
        // the interlacing is set per the ImageWriteParam mode setting.
        if (param != null && param.canWriteProgressive()) {
            if (param.getProgressiveMode() ==
                ImageWriteParam.MODE_DISABLED) {
                imageMetadata.interlaceFlag = false;
            } else if (param.getProgressiveMode() ==
                       ImageWriteParam.MODE_DEFAULT) {
                imageMetadata.interlaceFlag = true;
            }
        }
    }

    // Unset local color table if equal to global color table.
    if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
        imageMetadata.localColorTable = null;
    }

    // Override dimensions
    imageMetadata.imageWidth = destSize.width;
    imageMetadata.imageHeight = destSize.height;

    // Write Graphics Control Extension.
    if (writeGraphicsControlExtension) {
        writeGraphicControlExtension(imageMetadata);
    }

    // Write extension blocks.
    writePlainTextExtension(imageMetadata);
    writeApplicationExtension(imageMetadata);
    writeCommentExtension(imageMetadata);

    // Write Image Descriptor
    int bitsPerPixel =
        getNumBits(imageMetadata.localColorTable == null ?
                   (globalColorTable == null ?
                    sampleModel.getSampleSize(0) :
                    globalColorTable.length/3) :
                   imageMetadata.localColorTable.length/3);
    writeImageDescriptor(imageMetadata, bitsPerPixel);

    // Write image data
    writeRasterData(image, sourceBounds, destSize,
                    param, imageMetadata.interlaceFlag);
}