@Override public HSLFPictureData addPicture(byte[] data, PictureType format) throws IOException { if (format == null || format.nativeId == -1) { throw new IllegalArgumentException("Unsupported picture format: " + format); } byte[] uid = HSLFPictureData.getChecksum(data); for (HSLFPictureData pd : getPictureData()) { if (Arrays.equals(pd.getUID(), uid)) { return pd; } } EscherContainerRecord bstore; EscherContainerRecord dggContainer = _documentRecord.getPPDrawingGroup().getDggContainer(); bstore = (EscherContainerRecord) HSLFShape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER); if (bstore == null) { bstore = new EscherContainerRecord(); bstore.setRecordId(EscherContainerRecord.BSTORE_CONTAINER); dggContainer.addChildBefore(bstore, EscherOptRecord.RECORD_ID); } HSLFPictureData pict = HSLFPictureData.create(format); pict.setData(data); int offset = _hslfSlideShow.addPicture(pict); EscherBSERecord bse = new EscherBSERecord(); bse.setRecordId(EscherBSERecord.RECORD_ID); bse.setOptions((short) (0x0002 | (format.nativeId << 4))); bse.setSize(pict.getRawData().length + 8); bse.setUid(uid); bse.setBlipTypeMacOS((byte) format.nativeId); bse.setBlipTypeWin32((byte) format.nativeId); if (format == PictureType.EMF) { bse.setBlipTypeMacOS((byte) PictureType.PICT.nativeId); } else if (format == PictureType.WMF) { bse.setBlipTypeMacOS((byte) PictureType.PICT.nativeId); } else if (format == PictureType.PICT) { bse.setBlipTypeWin32((byte) PictureType.WMF.nativeId); } bse.setRef(0); bse.setOffset(offset); bse.setRemainingData(new byte[0]); bstore.addChildRecord(bse); int count = bstore.getChildRecords().size(); bstore.setOptions((short) ((count << 4) | 0xF)); return pict; }