45 if( bHMirr || bVMirr )
51 nMirrorFlags |= BmpMirrorFlags::Horizontal;
54 nMirrorFlags |= BmpMirrorFlags::Vertical;
72 aNewAnim.
Replace(aAnimationFrame,
i);
83 if( nMirrorFlags != BmpMirrorFlags::NONE )
88 bool( nMirrorFlags & BmpMirrorFlags::Horizontal ),
89 bool( nMirrorFlags & BmpMirrorFlags::Vertical ) );
94 aBmp.
Mirror( nMirrorFlags );
99 aRetGraphic = rGraphic;
105 const OUString& rFilterName,
const XOutFlags nFlags,
106 const Size* pMtfSize_100TH_MM,
107 const css::uno::Sequence< css::beans::PropertyValue >* pFilterData )
109 if( rGraphic.
GetType() == GraphicType::NONE )
119 DBG_ASSERT(
aURL.GetProtocol() != INetProtocol::NotValid,
"XOutBitmap::WriteGraphic(...): invalid URL" );
125 if (
aStr[0] ==
'-' )
126 aStr = OUString::Concat(
"m") +
aStr.subView(1);
134 if (rVectorGraphicDataPtr && rVectorGraphicDataPtr->getBinaryDataContainer().getSize())
137 const bool bIsSvg(rFilterName.equalsIgnoreAsciiCase(
"svg") && VectorGraphicDataType::Svg == rVectorGraphicDataPtr->getType());
138 const bool bIsWmf(rFilterName.equalsIgnoreAsciiCase(
"wmf") && VectorGraphicDataType::Wmf == rVectorGraphicDataPtr->getType());
139 bool bIsEmf(rFilterName.equalsIgnoreAsciiCase(
"emf") && VectorGraphicDataType::Emf == rVectorGraphicDataPtr->getType());
142 bIsEmf = rFilterName.equalsIgnoreAsciiCase(
"emf") && rGraphic.
GetGfxLink().
IsEMF();
144 const bool bIsPdf(rFilterName.equalsIgnoreAsciiCase(
"pdf") && VectorGraphicDataType::Pdf == rVectorGraphicDataPtr->getType());
146 if (bIsSvg || bIsWmf || bIsEmf || bIsPdf)
150 aURL.setExtension(rFilterName);
159 auto & rDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer();
160 pOStm->
WriteBytes(rDataContainer.getData(), rDataContainer.getSize());
172 ( rGraphic.
GetType() != GraphicType::GdiMetafile ) && rGraphic.
IsGfxLink() )
179 case GfxLinkType::NativeGif: aExt =
FORMAT_GIF;
break;
182 case GfxLinkType::NativeBmp: aExt =
FORMAT_BMP;
break;
184 case GfxLinkType::NativeJpg: aExt =
FORMAT_JPG;
break;
185 case GfxLinkType::NativePng: aExt =
FORMAT_PNG;
break;
186 case GfxLinkType::NativeWebp: aExt =
FORMAT_WEBP;
break;
195 if( !aExt.isEmpty() && (aExt == rFilterName || rFilterName.isEmpty()) )
198 aURL.setExtension( aExt );
215 OUString aFilter( rFilterName );
216 bool bWriteTransGrf = ( aFilter.equalsIgnoreAsciiCase(
"transgrf" ) ) ||
217 ( aFilter.equalsIgnoreAsciiCase(
"gif" ) ) ||
245 if( pMtfSize_100TH_MM && ( rGraphic.
GetType() != GraphicType::Bitmap ) )
248 const Size aSize(pVDev->LogicToPixel(*pMtfSize_100TH_MM,
MapMode(MapUnit::Map100thMM)));
250 if( pVDev->SetOutputSizePixel( aSize ) )
252 const Wallpaper aWallpaper( pVDev->GetBackground() );
257 rGraphic.
Draw(*pVDev, aPt, aSize);
259 const Bitmap aBitmap( pVDev->GetBitmap( aPt, aSize ) );
261 pVDev->SetBackground( aWallpaper );
263 rGraphic.
Draw(*pVDev, aPt, aSize);
265 pVDev->SetRasterOp( RasterOp::Xor );
266 pVDev->DrawBitmap( aPt, aSize, aBitmap );
267 aGraphic =
BitmapEx( aBitmap, pVDev->GetBitmap( aPt, aSize ) );
278 if( pMtfSize_100TH_MM && ( rGraphic.
GetType() != GraphicType::Bitmap ) )
281 const Size aSize(pVDev->LogicToPixel(*pMtfSize_100TH_MM,
MapMode(MapUnit::Map100thMM)));
283 if( pVDev->SetOutputSizePixel( aSize ) )
300 nBmpMirrorFlags |= BmpMirrorFlags::Horizontal;
302 nBmpMirrorFlags |= BmpMirrorFlags::Vertical;
306 if (aGraphic.
GetType() != GraphicType::NONE)
309 aURL.setExtension( aExt );
324 if (aTargetFormat == ConvertDataFormat::Unknown)
328 case GfxLinkType::NativeJpg:
329 aTargetFormat = ConvertDataFormat::JPG;
331 case GfxLinkType::NativePng:
332 aTargetFormat = ConvertDataFormat::PNG;
334 case GfxLinkType::NativeSvg:
335 aTargetFormat = ConvertDataFormat::SVG;
339 aTargetFormat = ConvertDataFormat::PNG;
347 SAL_WARN(
"svx",
"XOutBitmap::GraphicToBase64() invalid Graphic? error: " << nErr );
351 OUStringBuffer aStrBuffer;
353 rOUString = aStrBuffer.makeStringAndClear();
359 rOUString =
aMimeType +
";base64," + rOUString;
367 const css::uno::Sequence< css::beans::PropertyValue >* pFilterData )
369 DBG_ASSERT( rURL.
GetProtocol() != INetProtocol::NotValid,
"XOutBitmap::ExportGraphic(...): invalid URL" );
constexpr OUStringLiteral FORMAT_BMP
constexpr OUStringLiteral FORMAT_PNG
constexpr OUStringLiteral FORMAT_GIF
constexpr OUStringLiteral FORMAT_WEBP
constexpr OUStringLiteral FORMAT_JPG
void Replace(const AnimationFrame &rNewAnimationBmp, sal_uInt16 nAnimation)
const Size & GetDisplaySizePixel() const
const AnimationFrame & Get(sal_uInt16 nAnimation) const
bool Mirror(BmpMirrorFlags nMirrorFlags)
const sal_uInt8 * GetData() const
sal_uInt32 GetDataSize() const
GfxLinkType GetType() const
static ErrCode Export(SvStream &rOStm, const Graphic &rGraphic, ConvertDataFormat nFormat)
sal_uInt16 GetExportFormatNumberForShortName(std::u16string_view rShortName)
static GraphicFilter & GetGraphicFilter()
ErrCode ExportGraphic(const Graphic &rGraphic, const INetURLObject &rPath, sal_uInt16 nFormat, const css::uno::Sequence< css::beans::PropertyValue > *pFilterData=nullptr)
OUString GetExportFormatShortName(sal_uInt16 nFormat)
Animation GetAnimation() const
GraphicType GetType() const
GfxLink GetGfxLink() const
BitmapChecksum GetChecksum() const
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
void Draw(OutputDevice &rOutDev, const Point &rDestPt) const
const std::shared_ptr< VectorGraphicData > & getVectorGraphicData() const
bool IsTransparent() const
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
INetProtocol GetProtocol() const
SvStream * GetOutStream()
constexpr tools::Long Height() const
constexpr tools::Long Width() const
virtual sal_uInt64 TellEnd() override
std::size_t WriteBytes(const void *pData, std::size_t nSize)
static ErrCode WriteGraphic(const Graphic &rGraphic, OUString &rFileName, const OUString &rFilterName, const XOutFlags nFlags, const Size *pMtfSize_100TH_MM=nullptr, const css::uno::Sequence< css::beans::PropertyValue > *pFilterData=nullptr)
static bool GraphicToBase64(const Graphic &rGraphic, OUString &rOUString, bool bAddPrefix=true, ConvertDataFormat aTargetFormat=ConvertDataFormat::Unknown)
static Animation MirrorAnimation(const Animation &rAnimation, bool bHMirr, bool bVMirr)
static Graphic MirrorGraphic(const Graphic &rGraphic, const BmpMirrorFlags nMirrorFlags)
static ErrCode ExportGraphic(const Graphic &rGraphic, const INetURLObject &rURL, GraphicFilter &rFilter, const sal_uInt16 nFormat, const css::uno::Sequence< css::beans::PropertyValue > *pFilterData)
static void encode(OUStringBuffer &aStrBuffer, const css::uno::Sequence< sal_Int8 > &aPass)
static OUString GetMimeTypeForConvertDataFormat(ConvertDataFormat convertDataFormat)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
#define DBG_ASSERT(sCon, aError)
#define GRFILTER_FORMAT_NOTFOUND
#define ERRCODE_GRFILTER_FILTERERROR
#define ERRCODE_GRFILTER_IOERROR
#define SAL_WARN(area, stream)
const sal_Unicode *const aMimeType[]