< prev index next >
test/jdk/javax/imageio/plugins/png/VerifyRGBValuesFromBKGDChunk.java
Print this page
*** 21,31 ****
* questions.
*/
/*
* @test
! * @bug 6574555
* @summary Test verifies that PNGImageWriter encodes the R, G, B
* values of bKGD chunk properly.
* @run main VerifyRGBValuesFromBKGDChunk
*/
--- 21,31 ----
* questions.
*/
/*
* @test
! * @bug 6574555 5109146
* @summary Test verifies that PNGImageWriter encodes the R, G, B
* values of bKGD chunk properly.
* @run main VerifyRGBValuesFromBKGDChunk
*/
*** 35,44 ****
--- 35,45 ----
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriter;
import javax.imageio.ImageReader;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
+ import javax.imageio.metadata.IIOInvalidTreeException;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import javax.imageio.IIOImage;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;
*** 46,88 ****
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class VerifyRGBValuesFromBKGDChunk {
! public static void main(String[] args) throws IOException {
! int width = 1;
! int height = 1;
! BufferedImage img = new
! BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
! Iterator<ImageWriter> iterWriter =
! ImageIO.getImageWritersBySuffix("png");
! ImageWriter writer = iterWriter.next();
! ImageWriteParam param = writer.getDefaultWriteParam();
! ImageTypeSpecifier specifier =
! ImageTypeSpecifier.
! createFromBufferedImageType(BufferedImage.TYPE_INT_BGR);
! IIOMetadata encodeMetadata =
! writer.getDefaultImageMetadata(specifier, param);
! // Write png image with bKGD chunk
IIOMetadataNode bKGD_rgb = new IIOMetadataNode("bKGD_RGB");
! String red = "100";
! String green = "150";
! String blue = "200";
! bKGD_rgb.setAttribute("red", red);
! bKGD_rgb.setAttribute("green", green);
! bKGD_rgb.setAttribute("blue", blue);
IIOMetadataNode bKGD = new IIOMetadataNode("bKGD");
bKGD.appendChild(bKGD_rgb);
IIOMetadataNode encodeRoot =
new IIOMetadataNode("javax_imageio_png_1.0");
encodeRoot.appendChild(bKGD);
encodeMetadata.mergeTree("javax_imageio_png_1.0", encodeRoot);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
writer.setOutput(ios);
writer.write(encodeMetadata,
--- 47,98 ----
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class VerifyRGBValuesFromBKGDChunk {
! private static IIOMetadata encodeMetadata;
! private static ImageWriter writer;
! private static BufferedImage img;
! private static ImageWriteParam param;
! private static boolean nativeBKGDFail, standardBKGDFail;
! private static IIOMetadataNode bKGD_RGBNode;
! private static final String BKGDRED = "100";
! private static final String BKGDGREEN = "150";
! private static final String BKGDBLUE = "200";
!
! private static void mergeStandardMetadata() throws IIOInvalidTreeException {
! IIOMetadataNode background_rgb = new IIOMetadataNode("BackgroundColor");
!
! background_rgb.setAttribute("red", BKGDRED);
! background_rgb.setAttribute("green", BKGDGREEN);
! background_rgb.setAttribute("blue", BKGDBLUE);
!
! IIOMetadataNode chroma = new IIOMetadataNode("Chroma");
! chroma.appendChild(background_rgb);
! IIOMetadataNode encodeRoot = new IIOMetadataNode("javax_imageio_1.0");
! encodeRoot.appendChild(chroma);
! encodeMetadata.mergeTree("javax_imageio_1.0", encodeRoot);
! }
! private static void mergeNativeMetadata() throws IIOInvalidTreeException {
IIOMetadataNode bKGD_rgb = new IIOMetadataNode("bKGD_RGB");
!
! bKGD_rgb.setAttribute("red", BKGDRED);
! bKGD_rgb.setAttribute("green", BKGDGREEN);
! bKGD_rgb.setAttribute("blue", BKGDBLUE);
IIOMetadataNode bKGD = new IIOMetadataNode("bKGD");
bKGD.appendChild(bKGD_rgb);
IIOMetadataNode encodeRoot =
new IIOMetadataNode("javax_imageio_png_1.0");
encodeRoot.appendChild(bKGD);
encodeMetadata.mergeTree("javax_imageio_png_1.0", encodeRoot);
+ }
+ private static void writeAndReadMetadata() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
writer.setOutput(ios);
writer.write(encodeMetadata,
*** 103,119 ****
IIOMetadata decodeMetadata = reader.getImageMetadata(0);
IIOMetadataNode decodeRoot =
(IIOMetadataNode) decodeMetadata.
getAsTree("javax_imageio_png_1.0");
! bKGD_rgb = (IIOMetadataNode)
decodeRoot.getElementsByTagName("bKGD_RGB").item(0);
reader.dispose();
! if (!(red.equals(bKGD_rgb.getAttribute("red")) &&
! green.equals(bKGD_rgb.getAttribute("green")) &&
! blue.equals(bKGD_rgb.getAttribute("blue")))) {
throw new RuntimeException("bKGD RGB values are not stored" +
" properly");
}
}
}
--- 113,170 ----
IIOMetadata decodeMetadata = reader.getImageMetadata(0);
IIOMetadataNode decodeRoot =
(IIOMetadataNode) decodeMetadata.
getAsTree("javax_imageio_png_1.0");
! bKGD_RGBNode = (IIOMetadataNode)
decodeRoot.getElementsByTagName("bKGD_RGB").item(0);
reader.dispose();
+ }
+
+ private static boolean verifyRGBValues() {
+ return (!(BKGDRED.equals(bKGD_RGBNode.getAttribute("red")) &&
+ BKGDGREEN.equals(bKGD_RGBNode.getAttribute("green")) &&
+ BKGDBLUE.equals(bKGD_RGBNode.getAttribute("blue"))));
+ }
+
+ private static void VerifyNativeRGBValuesFromBKGDChunk()
+ throws IOException {
+
+ mergeNativeMetadata();
+ writeAndReadMetadata();
+ nativeBKGDFail = verifyRGBValues();
+ }
+
+ private static void VerifyStandardRGBValuesFromBKGDChunk()
+ throws IOException {
+
+ mergeStandardMetadata();
+ writeAndReadMetadata();
+ standardBKGDFail = verifyRGBValues();
+ }
+
+ public static void main(String[] args) throws IOException {
+ int width = 1;
+ int height = 1;
+ img = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
+ Iterator<ImageWriter> iterWriter =
+ ImageIO.getImageWritersBySuffix("png");
+ writer = iterWriter.next();
+
+ param = writer.getDefaultWriteParam();
+ ImageTypeSpecifier specifier =
+ ImageTypeSpecifier.
+ createFromBufferedImageType(BufferedImage.TYPE_INT_BGR);
+ encodeMetadata = writer.getDefaultImageMetadata(specifier, param);
+
+ // Verify bKGD RGB values after merging metadata using native tree
+ VerifyNativeRGBValuesFromBKGDChunk();
+
+ // Verify bKGD RGB values after merging metadata using standard tree
+ VerifyStandardRGBValuesFromBKGDChunk();
! if (nativeBKGDFail || standardBKGDFail) {
throw new RuntimeException("bKGD RGB values are not stored" +
" properly");
}
}
}
< prev index next >