summaryrefslogtreecommitdiff
path: root/oox/source/export/drawingml.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source/export/drawingml.cxx')
-rw-r--r--oox/source/export/drawingml.cxx34
1 files changed, 26 insertions, 8 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 6cad974774d8..1b35cac7f9cf 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -809,14 +809,32 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia )
break;
default: {
GraphicType aType = rGraphic.GetType();
- if ( aType == GRAPHIC_BITMAP ) {
- GraphicConverter::Export( aStream, rGraphic, CVT_PNG );
- sMediaType = "image/png";
- pExtension = ".png";
- } else if ( aType == GRAPHIC_GDIMETAFILE ) {
- GraphicConverter::Export( aStream, rGraphic, CVT_EMF );
- sMediaType = "image/x-emf";
- pExtension = ".emf";
+ if ( aType == GRAPHIC_BITMAP && GRAPHIC_GDIMETAFILE) {
+ bool bSwapped = rGraphic.IsSwapOut();
+
+ //Warn rather than just happily swap in because of the comments
+ //in the sw export filters about needing to go through the
+ //hairy SwGrfNode::SwapIn which we would subvert by swapping in
+ //without it knowing about it, so while those ones are fixed we
+ //probably have to assume that we should ideally be presented
+ //here with already swapped in graphics.
+ SAL_WARN_IF(bSwapped, "oox", "attempted to output swapped out graphic");
+
+ if (bSwapped)
+ const_cast<Graphic&>(rGraphic).SwapIn();
+
+ if ( aType == GRAPHIC_BITMAP ) {
+ GraphicConverter::Export( aStream, rGraphic, CVT_PNG );
+ sMediaType = "image/png";
+ pExtension = ".png";
+ } else {
+ GraphicConverter::Export( aStream, rGraphic, CVT_EMF );
+ sMediaType = "image/x-emf";
+ pExtension = ".emf";
+ }
+
+ if (bSwapped)
+ const_cast<Graphic&>(rGraphic).SwapOut();
} else {
OSL_TRACE( "unhandled graphic type" );
/*Earlier, even in case of unhandled graphic types we were