javax.imageio.ImageWriteParam#MODE_DEFAULT源码实例Demo

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

源代码1 项目: jdk8u_jdk   文件: RleEncodingTest.java
public static void main(String args[]) throws Exception {
    try {
        int mode = ImageWriteParam.MODE_EXPLICIT;
        String type = "BI_RLE4";
        doTest(type, mode);

        type = "BI_RLE8";
        doTest(type, mode);

        mode = ImageWriteParam.MODE_DEFAULT;
        type = "BI_RLE4";
        doTest(type, mode);

        type = "BI_RLE8";
        doTest(type, mode);

        System.out.println("Test 4bpp image.");
        encodeRLE4Test();

        System.out.println("Test 8bpp image.");
        encodeRLE8Test();
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException("Unexpected exception. Test failed");
    }
}
 
源代码2 项目: jdk8u_jdk   文件: CompressionModeTest.java
public static void main(String args[]) {
    int[] iModes = { ImageWriteParam.MODE_DISABLED,
                     ImageWriteParam.MODE_EXPLICIT,
                     ImageWriteParam.MODE_COPY_FROM_METADATA,
                     ImageWriteParam.MODE_DEFAULT };

    String[] strModes = { "ImageWriteParam.MODE_DISABLED",
                          "ImageWriteParam.MODE_EXPLICIT",
                          "ImageWriteParam.MODE_COPY_FROM_METADATA",
                          "ImageWriteParam.MODE_DEFAULT" };

    for(int i=0; i<iModes.length; i++) {
        System.out.println("Test compression mode "+strModes[i]);
        doTest(iModes[i]);
    }
}
 
源代码3 项目: openjdk-jdk9   文件: DisableCompressionTest.java
private static String getModeName(int mode) {
    switch(mode) {
        case ImageWriteParam.MODE_COPY_FROM_METADATA:
            return "MODE_COPY_FROM_METADATA";
        case ImageWriteParam.MODE_DEFAULT:
            return "MODE_DEFAULT";
        case ImageWriteParam.MODE_DISABLED:
            return "MODE_DISABLED";
        case ImageWriteParam.MODE_EXPLICIT:
            return "MODE_EXPLICIT";
        default:
            throw new IllegalArgumentException("Unknown mode: " + mode);
    }
}
 
源代码4 项目: jdk8u_jdk   文件: DisableCompressionTest.java
private static String getModeName(int mode) {
    switch(mode) {
        case ImageWriteParam.MODE_COPY_FROM_METADATA:
            return "MODE_COPY_FROM_METADATA";
        case ImageWriteParam.MODE_DEFAULT:
            return "MODE_DEFAULT";
        case ImageWriteParam.MODE_DISABLED:
            return "MODE_DISABLED";
        case ImageWriteParam.MODE_EXPLICIT:
            return "MODE_EXPLICIT";
        default:
            throw new IllegalArgumentException("Unknown mode: " + mode);
    }
}
 
源代码5 项目: 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);
}
 
源代码6 项目: 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);
}
 
源代码7 项目: 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);
}
 
源代码8 项目: 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);
}
 
源代码9 项目: 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);
}
 
源代码10 项目: 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);
}
 
源代码11 项目: 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);
}
 
源代码12 项目: 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);
}
 
源代码13 项目: 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);
}
 
源代码14 项目: 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);
}
 
源代码15 项目: 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);
}
 
源代码16 项目: 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);
}
 
源代码17 项目: 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);
}
 
源代码18 项目: 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);
}
 
源代码19 项目: 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);
}
 
源代码20 项目: 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);
}