Yegor's update from bug #39991 - better identification of what underlying picture data a picture object relates to

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@421843 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2006-07-14 09:18:44 +00:00
parent e15bce1dd2
commit 774caa9892
3 changed files with 28 additions and 1 deletions

View File

@ -153,10 +153,11 @@ public class Picture extends SimpleShape {
int idx = getPictureIndex()-1; int idx = getPictureIndex()-1;
EscherBSERecord bse = (EscherBSERecord)lst.get(idx); EscherBSERecord bse = (EscherBSERecord)lst.get(idx);
for ( int i = 0; i < pict.length; i++ ) { for ( int i = 0; i < pict.length; i++ ) {
if (Arrays.equals(bse.getUid(), pict[i].getUID())){ if (pict[i].getOffset() == bse.getOffset()){
return pict[i]; return pict[i];
} }
} }
System.err.println("Warning - no picture found for our BSE offset " + bse.getOffset());
return null; return null;
} }

View File

@ -49,6 +49,11 @@ public class PictureData {
*/ */
protected byte[] header; protected byte[] header;
/**
* The offset to the picture in the stream
*/
protected int offset;
public PictureData(){ public PictureData(){
header = new byte[PictureData.HEADER_SIZE]; header = new byte[PictureData.HEADER_SIZE];
} }
@ -76,6 +81,7 @@ public class PictureData {
// Save the picture data // Save the picture data
pictdata = new byte[size]; pictdata = new byte[size];
this.offset = offset;
System.arraycopy(pictstream, startPos, pictdata, 0, pictdata.length); System.arraycopy(pictstream, startPos, pictdata, 0, pictdata.length);
} }
@ -163,6 +169,25 @@ public class PictureData {
return header; return header;
} }
/**
* File offset in the 'Pictures' stream
*
* @return offset in the 'Pictures' stream
*/
public int getOffset(){
return offset;
}
/**
* Set offset of this picture in the 'Pictures' stream.
* We need to set it when a new picture is created.
*
* @param offset in the 'Pictures' stream
*/
public void setOffset(int offset){
this.offset = offset;
}
/** /**
* Compute 16-byte checksum of this picture * Compute 16-byte checksum of this picture
*/ */

View File

@ -671,6 +671,7 @@ public class SlideShow
pict.setUID(uid); pict.setUID(uid);
pict.setData(data); pict.setData(data);
pict.setType(format); pict.setType(format);
pict.setOffset(offset);
_hslfSlideShow.addPicture(pict); _hslfSlideShow.addPicture(pict);