package org.hipi.test; import static org.junit.Assert.*; import static org.junit.Assume.*; import org.hipi.image.FloatImage; import org.hipi.image.HipiImageHeader; import org.hipi.image.io.ImageDecoder; import org.hipi.image.io.ImageEncoder; import org.hipi.image.io.PngCodec; import org.junit.Test; import org.junit.Ignore; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; public class PngCodecTestCase { /* @Test public void testTwelveMonkeysPlugIn() { boolean foundTwelveMonkeys = false; Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("PNG"); while (readers.hasNext()) { ImageReader imageReader = readers.next(); System.out.println("ImageReader: " + imageReader); } assertTrue("FATAL ERROR: failed to locate TwelveMonkeys ImageIO plugins", foundTwelveMonkeys); } */ @Test public void testDecodeImageHeader() throws IOException { ImageDecoder decoder = PngCodec.getInstance(); FileInputStream fis; HipiImageHeader header; String[] fileName = {"canon-ixus", "fujifilm-dx10", "fujifilm-finepix40i", "fujifilm-mx1700", "kodak-dc210", "kodak-dc240", "nikon-e950", "olympus-c960", "ricoh-rdc5300", "sanyo-vpcg250", "sanyo-vpcsx550", "sony-cybershot", "sony-d700"}; int[] width = {640, 1024, 600, 640, 640, 640, 800, 640, 896, 640, 640, 640, 672}; int[] height = {480, 768, 450, 480, 480, 480, 600, 480, 600, 480, 480, 480, 512}; int[] bit_depth = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}; for (int i = 0; i < fileName.length; i++) { fis = new FileInputStream("../testdata/png-exif-test/" + fileName[i] + ".png"); header = decoder.decodeHeader(fis); assertEquals("width not correct", width[i], header.getWidth()); assertEquals("height not correct", height[i], header.getHeight()); // assertEquals("bit depth not correct", bit_depth[i], header.bitDepth); } } /** * Test method for {@link hipi.image.io.PNGImageUtil#decodeImage(java.io.InputStream)}. * * @throws IOException */ @Ignore @Test public void testDecodeImage() throws IOException { /* ImageDecoder pngDecoder, ppmDecoder; pngDecoder = PNGImageUtil.getInstance(); ppmDecoder = PPMImageUtil.getInstance(); ImageEncoder ppmEncoder = PPMImageUtil.getInstance(); FileInputStream fis; FileOutputStream fos; FloatImage ppmImage, pngImage; String[] fileName = {"canon-ixus", "cmyk-jpeg-format"}; for (int i = 0; i < fileName.length; i++) { fis = new FileInputStream("data/test/PNGImageUtilTestCase/truth/" + fileName[i] + ".ppm"); ppmImage = ppmDecoder.decodeImage(fis); assumeNotNull(ppmImage); fis = new FileInputStream("data/test/PNGImageUtilTestCase/decode/" + fileName[i] + ".png"); pngImage = pngDecoder.decodeImage(fis); fos = new FileOutputStream("/tmp/testpngdecode_" + fileName[i] + ".ppm"); ppmEncoder.encodeImage(pngImage, null, fos); assumeNotNull(pngImage); assertEquals(fileName[i] + " decoding fails for " + fileName[i], ppmImage, pngImage); } */ } /** * Test method for * {@link hipi.image.io.PNGImageUtil#encodeImage(hipi.image.FloatImage, hipi.image.ImageHeader, java.io.OutputStream)} * . * * @throws IOException */ @Ignore @Test public void testEncodeImage() throws IOException { /* ImageDecoder decoder = PPMImageUtil.getInstance(); ImageEncoder encoder = PNGImageUtil.getInstance(); FileInputStream pis; FileOutputStream pos; FloatImage image; String[] fileName = {"canon-ixus", "cmyk-jpeg-format"}; for (int i = 0; i < fileName.length; i++) { pis = new FileInputStream("data/test/PNGImageUtilTestCase/truth/" + fileName[i] + ".ppm"); image = decoder.decodeImage(pis); pos = new FileOutputStream("/tmp/" + fileName[i] + ".png"); encoder.encodeImage(image, null, pos); Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("compare -metric MSE data/test/PNGImageUtilTestCase/truth/" + fileName[i] + ".ppm /tmp/" + fileName[i] + ".png /tmp/psnr.png"); Scanner scanner = new Scanner(new InputStreamReader(pr.getErrorStream())); float mse = scanner.hasNextFloat() ? scanner.nextFloat() : -1; assertTrue(fileName[i] + " MSE is too high : " + mse, mse == 0); } */ } }