diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-04-07 16:51:29 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-04-07 18:09:12 +0200 |
commit | 2a7fdf2a7bb7345c49c988dfd1fcdb41cebb8a1e (patch) | |
tree | 631a4dd1f48a600bb9c27476a4492554b6226aee /embeddedobj/source | |
parent | 6ac0e1399a2be344284f192fb3445489346b1fba (diff) |
fdo#77140 embeddedobj: avoid unneeded conversion in ConvertBufferToFormat()
The primary reason is not performance: on export currently we loose some
EMF+ properties. While it would be good to fix all those problems one by
one, this is a small fix to avoid all kind of roundtrip problems in this
situation.
Change-Id: If5e1c1eabd8290f36b538e374c9707ae17097786
Diffstat (limited to 'embeddedobj/source')
-rw-r--r-- | embeddedobj/source/msole/graphconvert.cxx | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/embeddedobj/source/msole/graphconvert.cxx b/embeddedobj/source/msole/graphconvert.cxx index ad8e910c8431..37aeb6914798 100644 --- a/embeddedobj/source/msole/graphconvert.cxx +++ b/embeddedobj/source/msole/graphconvert.cxx @@ -32,6 +32,7 @@ #include <comphelper/processfactory.hxx> #include <comphelper/seqstream.hxx> #include <tools/stream.hxx> +#include <vcl/graphicfilter.hxx> #include "mtnotification.hxx" #include "oleembobj.hxx" @@ -48,6 +49,17 @@ sal_Bool ConvertBufferToFormat( void* pBuf, // produces sequence with data in requested format and returns it in aResult if ( pBuf ) { + // First, in case the buffer is already in the requested format, then avoid a conversion. + SvMemoryStream aMemoryStream(pBuf, nBufSize, STREAM_READ); + GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); + sal_uInt16 nRetFormat = 0; + if (rFilter.CanImportGraphic(OUString(), aMemoryStream, GRFILTER_FORMAT_DONTKNOW, &nRetFormat) == GRFILTER_OK && + rFilter.GetImportFormatMediaType(nRetFormat) == aMimeType) + { + aResult <<= uno::Sequence< sal_Int8 >( reinterpret_cast< const sal_Int8* >( aMemoryStream.GetData() ), aMemoryStream.Seek( STREAM_SEEK_TO_END ) ); + return sal_True; + } + uno::Sequence < sal_Int8 > aData( (sal_Int8*)pBuf, nBufSize ); uno::Reference < io::XInputStream > xIn = new comphelper::SequenceInputStream( aData ); try |