diff options
Diffstat (limited to 'oox/source/export/drawingml.cxx')
-rw-r--r-- | oox/source/export/drawingml.cxx | 34 |
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 |