poi-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r464984 - in /jakarta/poi/trunk/src/scratchpad: src/org/apache/poi/hslf/blip/ src/org/apache/poi/hslf/extractor/ src/org/apache/poi/hslf/usermodel/ testcases/org/apache/poi/hslf/data/ testcases/org/apache/poi/hslf/usermodel/
Date Tue, 17 Oct 2006 18:12:45 GMT
Author: nick
Date: Tue Oct 17 11:12:43 2006
New Revision: 464984

URL: http://svn.apache.org/viewvc?view=rev&rev=464984
Log:
Support for DIB picture types, from Bug 40740

Added:
    jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/DIB.java
    jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/sci_cec.dib   (with
props)
Modified:
    jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/extractor/ImageExtractor.java
    jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/PictureData.java
    jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java

Added: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/DIB.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/DIB.java?view=auto&rev=464984
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/DIB.java (added)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/DIB.java Tue Oct 17 11:12:43
2006
@@ -0,0 +1,81 @@
+/* ====================================================================
+   Copyright 2002-2004   Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+package org.apache.poi.hslf.blip;
+
+import org.apache.poi.hslf.model.Picture;
+import org.apache.poi.util.LittleEndian;
+
+import java.io.IOException;
+
+/**
+ * Represents a DIB picture data in a PPT file
+ * 
+ * @author Yegor Kozlov
+ */
+public class DIB extends Bitmap {
+    /**
+     * Size of the BITMAPFILEHEADER structure preceding the actual DIB bytes
+     */
+    public static final int HEADER_SIZE = 14;
+
+    /**
+     * @return type of  this picture
+     * @see  org.apache.poi.hslf.model.Picture#DIB
+     */
+    public int getType(){
+        return Picture.DIB;
+    }
+
+    /**
+     * DIB signature is <code>0x7A80</code>
+     *
+     * @return DIB signature (<code>0x7A80</code>)
+     */
+    public int getSignature(){
+        return 0x7A80;
+    }
+
+    public byte[] getData(){
+        byte[] data = super.getData();
+
+        // bitmap file-header, corresponds to a
+        // Windows  BITMAPFILEHEADER structure
+        // (For more information, consult the Windows API Programmer's reference )
+        byte[] header = new byte[HEADER_SIZE];
+        //Specifies the file type. It must be set to the signature word BM (0x4D42) to indicate
bitmap.
+        LittleEndian.putInt(header, 0, 0x4D42);
+        //Specifies the size, in bytes, of the bitmap file.
+        LittleEndian.putInt(header, 2, data.length); //DIB length including the header
+        //Reserved; set to zero
+        LittleEndian.putInt(header, 6, 0);
+        //the offset, in bytes, from the header to the bitmap bits (looks like it is always
2)
+        LittleEndian.putInt(header, 10, 2);
+
+        //DIB data is the header + dib bytes
+        byte[] dib = new byte[header.length + data.length];
+        System.arraycopy(header, 0, dib, 0, header.length);
+        System.arraycopy(data, 0, dib, header.length, data.length);
+
+        return dib;
+    }
+
+    public void setData(byte[] data) throws IOException {
+        //cut off the bitmap file-header
+        byte[] dib = new byte[data.length-HEADER_SIZE];
+        System.arraycopy(data, HEADER_SIZE, dib, 0, dib.length);
+        super.setData(dib);
+    }
+}

Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/extractor/ImageExtractor.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/extractor/ImageExtractor.java?view=diff&rev=464984&r1=464983&r2=464984
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/extractor/ImageExtractor.java
(original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/extractor/ImageExtractor.java
Tue Oct 17 11:12:43 2006
@@ -64,6 +64,9 @@
                 case Picture.PICT:
                     ext = ".pict";
                     break;
+                case Picture.DIB:
+                    ext = ".dib";
+                    break;
                 default:
                     continue;
             }

Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/PictureData.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/PictureData.java?view=diff&rev=464984&r1=464983&r2=464984
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/PictureData.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/PictureData.java Tue
Oct 17 11:12:43 2006
@@ -174,6 +174,9 @@
             case Picture.PNG:
                 pict = new PNG();
                 break;
+            case Picture.DIB:
+                pict = new DIB();
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported picture type: " + type);
         }

Added: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/sci_cec.dib
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/sci_cec.dib?view=auto&rev=464984
==============================================================================
Binary file - no diff available.

Propchange: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/sci_cec.dib
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java?view=diff&rev=464984&r1=464983&r2=464984
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java
(original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java
Tue Oct 17 11:12:43 2006
@@ -250,6 +250,46 @@
     }
 
     /**
+     * Test read/write DIB
+     */
+    public void testDIB() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "sci_cec.dib");
+        int idx = ppt.addPicture(img, Picture.DIB);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can read this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.DIB, pictures[0].getType());
+        assertTrue(pictures[0] instanceof DIB);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].getData();
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+    }
+
+    /**
      * Read file into a byte array
      */
     protected byte[] read(File f) throws IOException {



---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/


Mime
View raw message