diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/data/clock.jpg b/src/scratchpad/testcases/org/apache/poi/hslf/data/clock.jpg new file mode 100644 index 0000000000..5f05e42eac Binary files /dev/null and b/src/scratchpad/testcases/org/apache/poi/hslf/data/clock.jpg differ diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/data/painting.png b/src/scratchpad/testcases/org/apache/poi/hslf/data/painting.png new file mode 100644 index 0000000000..28f1233008 Binary files /dev/null and b/src/scratchpad/testcases/org/apache/poi/hslf/data/painting.png differ diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java index d40ed0eb93..b4503eb017 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java @@ -17,11 +17,19 @@ package org.apache.poi.hslf.usermodel; import org.apache.poi.hslf.*; +import org.apache.poi.hslf.usermodel.PictureData; +import org.apache.poi.hslf.usermodel.SlideShow; +import org.apache.poi.hslf.model.Slide; +import org.apache.poi.hslf.model.Shape; +import org.apache.poi.hslf.model.Picture; +import org.apache.poi.util.LittleEndian; import junit.framework.TestCase; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; /** * Test extracting images from a ppt file @@ -29,19 +37,61 @@ import java.io.ByteArrayInputStream; * @author Yegor Kozlov */ public class TestPictures extends TestCase{ + public static String dirname = System.getProperty("HSLF.testdata.path"); + public static String filename = dirname + "/ppt_with_png.ppt"; - public void testPictures() throws Exception { - String dirname = System.getProperty("HSLF.testdata.path"); - String filename = dirname + "/ppt_with_png.ppt"; + public void testReadPictures() throws Exception { HSLFSlideShow ppt = new HSLFSlideShow(filename); - Picture[] pict = ppt.getPictures(); + PictureData[] pict = ppt.getPictures(); assertNotNull(pict); for (int i = 0; i < pict.length; i++) { byte[] data = pict[i].getData(); + BufferedImage img = ImageIO.read(new ByteArrayInputStream(data)); assertNotNull(img); } ppt.close(); } + + public void testSerializePictures() throws Exception { + HSLFSlideShow ppt = new HSLFSlideShow(filename); + PictureData[] pict = ppt.getPictures(); + assertNotNull(pict); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ppt.write(out); + out.close(); + + ppt = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())); + pict = ppt.getPictures(); + assertNotNull(pict); + } + + public void testAddPictures() throws Exception { + int idx; + Slide slide; + Picture pict; + + SlideShow ppt = new SlideShow(); + + idx = ppt.addPicture(new File(dirname + "/clock.jpg"), Picture.JPEG); + slide = ppt.createSlide(); + pict = new Picture(idx); + pict.setDefaultSize(ppt); + slide.addShape(pict); + + idx = ppt.addPicture(new File(dirname + "/painting.png"), Picture.PNG); + pict = new Picture(idx); + pict.setDefaultSize(ppt); + slide.addShape(pict); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ppt.write(out); + out.close(); + + ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()))); + assertTrue(ppt.getPictures().length == 2 ); + } + }