git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@949483 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_7_BETA1
<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> | ||||
<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> |
public int getSignature(){ | public int getSignature(){ | ||||
return 0x7A80; | return 0x7A80; | ||||
} | } | ||||
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 | |||||
//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); | |||||
// read the size of the image and calculate the overall file size | |||||
// 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); | |||||
// the offset, i.e. starting address, of the byte where the bitmap data can be found | |||||
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]; | ||||
System.arraycopy(header, 0, dib, 0, header.length); | System.arraycopy(header, 0, dib, 0, header.length); |
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()); |