diff options
-rw-r--r-- | filter/source/svg/svgwriter.cxx | 45 | ||||
-rw-r--r-- | include/svx/svdograf.hxx | 9 | ||||
-rw-r--r-- | svx/source/svdraw/svdograf.cxx | 22 |
3 files changed, 34 insertions, 42 deletions
diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx index 7706e2c26e44..9ccd18eaafee 100644 --- a/filter/source/svg/svgwriter.cxx +++ b/filter/source/svg/svgwriter.cxx @@ -2725,29 +2725,52 @@ void SVGActionWriter::ImplWriteBmp( const BitmapEx& rBmpEx, bool bCached = false; SdrGrafObj* pGrafObj = nullptr; + bool bPNG = false; + bool bJPG = false; if (pShape) { pGrafObj = GetSdrGrafObjFromXShape(pShape); - if (pGrafObj && pGrafObj->GetPNGPreviewChecksum() == rBmpEx.GetChecksum()) + if (pGrafObj) { - const std::vector<sal_Int8>& rPreviewData = pGrafObj->GetPNGPreviewData(); - aOStm.WriteBytes(rPreviewData.data(), rPreviewData.size()); - bCached = true; + const Graphic& rGraphic = pGrafObj->GetGraphic(); + if (rGraphic.GetType() == GraphicType::Bitmap) + { + const BitmapEx& rGraphicBitmap = rGraphic.GetBitmapExRef(); + if (rGraphicBitmap.GetChecksum() == rBmpEx.GetChecksum()) + { + GfxLink aGfxLink = rGraphic.GetGfxLink(); + if (aGfxLink.GetType() == GfxLinkType::NativePng) + { + bPNG = true; + } + else if (aGfxLink.GetType() == GfxLinkType::NativeJpg) + { + bJPG = true; + } + if (bPNG || bJPG) + { + aOStm.WriteBytes(aGfxLink.GetData(), aGfxLink.GetDataSize()); + bCached = true; + } + } + } } } if( bCached || GraphicConverter::Export( aOStm, rBmpEx, ConvertDataFormat::PNG ) == ERRCODE_NONE ) { - if (!bCached && pGrafObj) - { - pGrafObj->SetPNGPreviewChecksum(rBmpEx.GetChecksum()); - pGrafObj->SetPNGPreviewData(aOStm); - } - Point aPt; Size aSz; Sequence< sal_Int8 > aSeq( static_cast<sal_Int8 const *>(aOStm.GetData()), aOStm.Tell() ); - OUStringBuffer aBuffer( "data:image/png;base64," ); + OUStringBuffer aBuffer; + if (bJPG) + { + aBuffer.append("data:image/jpeg;base64,"); + } + else + { + aBuffer.append("data:image/png;base64,"); + } ::comphelper::Base64::encode( aBuffer, aSeq ); ImplMap( rPt, aPt ); diff --git a/include/svx/svdograf.hxx b/include/svx/svdograf.hxx index 098ae70d73a2..8944db82bc2d 100644 --- a/include/svx/svdograf.hxx +++ b/include/svx/svdograf.hxx @@ -29,7 +29,6 @@ #include <vcl/GraphicObject.hxx> #include <svx/svxdllapi.h> #include <o3tl/typed_flags_set.hxx> -#include <tools/stream.hxx> #include <memory> #include <cstddef> @@ -123,9 +122,6 @@ private: void onGraphicChanged(); GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const; - BitmapChecksum mnPNGPreviewChecksum = 0; - std::vector<sal_Int8> maPNGPreviewData; - protected: // protected destructor virtual ~SdrGrafObj() override; @@ -301,11 +297,6 @@ public: { return mpQrCode.get(); }; - - void SetPNGPreviewChecksum(BitmapChecksum nPNGPreviewChecksum); - BitmapChecksum GetPNGPreviewChecksum() const; - void SetPNGPreviewData(SvMemoryStream& rPNGPreviewData); - const std::vector<sal_Int8>& GetPNGPreviewData() const; }; #endif // INCLUDED_SVX_SVDOGRAF_HXX diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx index f7c089d2232e..127de6a0c6f5 100644 --- a/svx/source/svdraw/svdograf.cxx +++ b/svx/source/svdraw/svdograf.cxx @@ -1276,26 +1276,4 @@ void SdrGrafObj::addCropHandles(SdrHdlList& rTarget) const rTarget.AddHdl(std::make_unique<SdrCropHdl>(Point(basegfx::fround(aPos.getX()), basegfx::fround(aPos.getY())), SdrHdlKind::LowerRight, fShearX, fRotate)); } -void SdrGrafObj::SetPNGPreviewChecksum(BitmapChecksum nPNGPreviewChecksum) -{ - mnPNGPreviewChecksum = nPNGPreviewChecksum; -} - -BitmapChecksum SdrGrafObj::GetPNGPreviewChecksum() const -{ - return mnPNGPreviewChecksum; -} - -void SdrGrafObj::SetPNGPreviewData(SvMemoryStream& rPNGPreviewData) -{ - rPNGPreviewData.Seek(0); - maPNGPreviewData.resize(rPNGPreviewData.remainingSize()); - rPNGPreviewData.ReadBytes(maPNGPreviewData.data(), maPNGPreviewData.size()); -} - -const std::vector<sal_Int8>& SdrGrafObj::GetPNGPreviewData() const -{ - return maPNGPreviewData; -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |