fixed construction of the DIB picture header, see Bugzilla 43161
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@949483 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
55c924c5d2
commit
6ee427ddf9
@ -34,6 +34,8 @@
|
|||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.7-SNAPSHOT" date="2010-??-??">
|
<release version="3.7-SNAPSHOT" date="2010-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43161 - fixed construction of the DIB picture header</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">49311 - initial support for reading AES-encrypted/write-protected OOXML files</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">48718 - Make the creation of multiple, un-modified fonts in a row in XSSF match the old HSSF behaviour</action>
|
<action dev="POI-DEVELOPERS" type="fix">48718 - Make the creation of multiple, un-modified fonts in a row in XSSF match the old HSSF behaviour</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44916 - Allow access to the HSSFPatriarch from HSSFSheet once created</action>
|
<action dev="POI-DEVELOPERS" type="fix">44916 - Allow access to the HSSFPatriarch from HSSFSheet once created</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">48779 - Allow you to get straight from a CellStyle to a Color, irrespective of if the Color is indexed or inline-defined</action>
|
<action dev="POI-DEVELOPERS" type="add">48779 - Allow you to get straight from a CellStyle to a Color, irrespective of if the Color is indexed or inline-defined</action>
|
||||||
@ -93,7 +95,6 @@
|
|||||||
<action dev="POI-DEVELOPERS" type="fix">48339 - fixed ExternalNameRecord to properly distinguish DDE data from OLE data items </action>
|
<action dev="POI-DEVELOPERS" type="fix">48339 - fixed ExternalNameRecord to properly distinguish DDE data from OLE data items </action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">47920 - allow editing workbooks embedded into PowerPoint files</action>
|
<action dev="POI-DEVELOPERS" type="fix">47920 - allow editing workbooks embedded into PowerPoint files</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">48343 - added implementation of SUBTOTAL function</action>
|
<action dev="POI-DEVELOPERS" type="add">48343 - added implementation of SUBTOTAL function</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">49311 - initial support for reading AES-encrypted/write-protected OOXML files</action>
|
|
||||||
</release>
|
</release>
|
||||||
<release version="3.6" date="2009-12-14">
|
<release version="3.6" date="2009-12-14">
|
||||||
<action dev="POI-DEVELOPERS" type="fix">48332 - fixed XSSFSheet autoSizeColumn() to tolerate empty RichTextString</action>
|
<action dev="POI-DEVELOPERS" type="fix">48332 - fixed XSSFSheet autoSizeColumn() to tolerate empty RichTextString</action>
|
||||||
|
@ -51,20 +51,29 @@ public final class DIB extends Bitmap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getData(){
|
public byte[] getData(){
|
||||||
byte[] data = super.getData();
|
return addBMPHeader ( super.getData() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] addBMPHeader(byte[] data){
|
||||||
// bitmap file-header, corresponds to a
|
// bitmap file-header, corresponds to a
|
||||||
// Windows BITMAPFILEHEADER structure
|
// Windows BITMAPFILEHEADER structure
|
||||||
// (For more information, consult the Windows API Programmer's reference )
|
// (For more information, consult the Windows API Programmer's reference )
|
||||||
byte[] header = new byte[HEADER_SIZE];
|
byte[] header = new byte[HEADER_SIZE];
|
||||||
//Specifies the file type. It must be set to the signature word BM (0x4D42) to indicate bitmap.
|
//Specifies the file type. It must be set to the signature word BM (0x4D42) to indicate bitmap.
|
||||||
LittleEndian.putInt(header, 0, 0x4D42);
|
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
|
// read the size of the image and calculate the overall file size
|
||||||
//Reserved; set to zero
|
// and the offset where the bitmap starts
|
||||||
|
int imageSize = LittleEndian.getInt(data, 0x22 - HEADER_SIZE);
|
||||||
|
int fileSize = data.length + HEADER_SIZE;
|
||||||
|
int offset = fileSize - imageSize;
|
||||||
|
|
||||||
|
// specifies the size, in bytes, of the bitmap file - must add the length of the header
|
||||||
|
LittleEndian.putInt(header, 2, fileSize);
|
||||||
|
// Reserved; set to zero
|
||||||
LittleEndian.putInt(header, 6, 0);
|
LittleEndian.putInt(header, 6, 0);
|
||||||
//the offset, in bytes, from the header to the bitmap bits (looks like it is always 2)
|
// the offset, i.e. starting address, of the byte where the bitmap data can be found
|
||||||
LittleEndian.putInt(header, 10, 2);
|
LittleEndian.putInt(header, 10, offset);
|
||||||
|
|
||||||
//DIB data is the header + dib bytes
|
//DIB data is the header + dib bytes
|
||||||
byte[] dib = new byte[header.length + data.length];
|
byte[] dib = new byte[header.length + data.length];
|
||||||
|
@ -252,7 +252,7 @@ public final class TestPictures extends TestCase{
|
|||||||
SlideShow ppt = new SlideShow();
|
SlideShow ppt = new SlideShow();
|
||||||
|
|
||||||
Slide slide = ppt.createSlide();
|
Slide slide = ppt.createSlide();
|
||||||
byte[] src_bytes = slTests.readFile("sci_cec.dib");
|
byte[] src_bytes = slTests.readFile("clock.dib");
|
||||||
int idx = ppt.addPicture(src_bytes, Picture.DIB);
|
int idx = ppt.addPicture(src_bytes, Picture.DIB);
|
||||||
Picture pict = new Picture(idx);
|
Picture pict = new Picture(idx);
|
||||||
assertEquals(idx, pict.getPictureIndex());
|
assertEquals(idx, pict.getPictureIndex());
|
||||||
|
BIN
test-data/slideshow/clock.dib
Executable file
BIN
test-data/slideshow/clock.dib
Executable file
Binary file not shown.
After Width: | Height: | Size: 99 KiB |
Loading…
Reference in New Issue
Block a user