23#include <osl/diagnose.h>
43#include <com/sun/star/beans/XFastPropertySet.hpp>
44#include <com/sun/star/rendering/MtfRenderer.hpp>
45#include <com/sun/star/rendering/XBitmapCanvas.hpp>
46#include <com/sun/star/rendering/XCanvas.hpp>
53struct ImplColAdjustParam
55 std::unique_ptr<sal_uInt8[]> pMapR;
56 std::unique_ptr<sal_uInt8[]> pMapG;
57 std::unique_ptr<sal_uInt8[]> pMapB;
60struct ImplBmpAdjustParam
62 short nLuminancePercent;
63 short nContrastPercent;
64 short nChannelRPercent;
65 short nChannelGPercent;
66 short nChannelBPercent;
71struct ImplColConvertParam
76struct ImplBmpConvertParam
81struct ImplColMonoParam
86struct ImplBmpMonoParam
91struct ImplColReplaceParam
93 std::unique_ptr<sal_uLong[]> pMinR;
94 std::unique_ptr<sal_uLong[]> pMaxR;
95 std::unique_ptr<sal_uLong[]> pMinG;
96 std::unique_ptr<sal_uLong[]> pMaxG;
97 std::unique_ptr<sal_uLong[]> pMinB;
98 std::unique_ptr<sal_uLong[]> pMaxB;
99 const Color * pDstCols;
103struct ImplBmpReplaceParam
105 const Color* pSrcCols;
106 const Color* pDstCols;
113 m_nCurrentActionElement( 0 ),
114 m_aPrefSize ( 1, 1 ),
117 m_pOutDev ( nullptr ),
120 m_bUseCanvas ( false ),
126 m_nCurrentActionElement( rMtf.m_nCurrentActionElement ),
127 m_aPrefMapMode ( rMtf.m_aPrefMapMode ),
128 m_aPrefSize ( rMtf.m_aPrefSize ),
129 m_pPrev ( rMtf.m_pPrev ),
130 m_pNext ( rMtf.m_pNext ),
131 m_pOutDev ( nullptr ),
134 m_bUseCanvas ( rMtf.m_bUseCanvas ),
135 m_bSVG ( rMtf.m_bSVG )
188 return (nAction <
m_aList.size()) ?
m_aList[ nAction ].get() :
nullptr;
204 if ( nAction >=
m_aList.size() )
210 std::swap(pAction,
m_aList[nAction]);
249 const size_t nObjCount =
m_aList.size();
260 for(
size_t n = 0;
n < nObjCount;
n++ )
287 pOut->SetConnectMetaFile(
this );
331 const size_t nObjCount =
m_aList.size();
353 const size_t nObjCount =
m_aList.size();
356 if(
nPos > nObjCount )
378 if(
i++ > nSyncCount )
419 uno::Reference< rendering::XBitmapCanvas > xBitmapCanvas( xBitmap, uno::UNO_QUERY );
420 if( xBitmapCanvas.is() )
423 uno::Reference< rendering::XMtfRenderer > xMtfRenderer = rendering::MtfRenderer::createWithBitmapCanvas( xContext, xBitmapCanvas );
425 xBitmapCanvas->clear();
426 uno::Reference< beans::XFastPropertySet > xMtfFastPropertySet( xMtfRenderer, uno::UNO_QUERY );
427 if( xMtfFastPropertySet.is() )
431 xMtfFastPropertySet->setFastPropertyValue( 0,
uno::Any(
reinterpret_cast<sal_Int64
>(
this ) ) );
433 xMtfRenderer->draw( rDestSize.
Width(), rDestSize.
Height() );
436 if( aBitmapEx.
Create( xBitmapCanvas, aSize ) )
447 catch (
const uno::RuntimeException& )
451 catch (
const uno::Exception&)
466 if (aDestSize.
Width() <= 0 || aDestSize.
Height() <= 0)
469 if (aDestSize.
Width() > std::numeric_limits<sal_Int32>::max() ||
470 aDestSize.
Height() > std::numeric_limits<sal_Int32>::max())
480 if( !aTmpPrefSize.
Width() )
483 if( !aTmpPrefSize.
Height() )
500 SAL_WARN(
"vcl",
"GDIMetaFile Scaling is too high");
518 const Size aEmptySize;
525 bool bIsRecord = (pMtf && pMtf->
IsRecord());
621 double fScaleX, fScaleY;
625 nMoveX = std::abs( aOldPrefSize.
Width() ) - 1;
636 nMoveY = std::abs( aOldPrefSize.
Height() ) - 1;
645 if( ( fScaleX != 1.0 ) || ( fScaleY != 1.0 ) )
647 Scale( fScaleX, fScaleY );
648 Move( nMoveX, nMoveY );
655 const Size aBaseOffset( nX, nY );
656 Size aOffset( aBaseOffset );
659 aMapVDev->EnableOutput(
false );
667 if( pAct->GetRefCount() > 1 )
689 const Size aBaseOffset( nX, nY );
690 Size aOffset( aBaseOffset );
693 aMapVDev->EnableOutput(
false );
694 aMapVDev->SetReferenceDevice( nDPIX, nDPIY );
702 if( pAct->GetRefCount() > 1 )
715 if( aMapVDev->GetMapMode().GetMapUnit() == MapUnit::MapPixel )
717 aOffset = aMapVDev->LogicToPixel( aBaseOffset,
GetPrefMapMode() );
736 if( pAct->GetRefCount() > 1 )
744 pModAct->
Scale( fScaleX, fScaleY );
758 Scale(
static_cast<double>(rScaleX),
static_cast<double>(rScaleY) );
766 aMapVDev->EnableOutput(
false );
777 pAct->Execute( aMapVDev.
get() );
793 const Size& rOffset,
double fSin,
double fCos )
799 -
FRound( fSin * nX - fCos * nY ) + rRotatePt.
Y() + rOffset.
Height() );
803 const Size& rOffset,
double fSin,
double fCos )
807 aRet.
Rotate( rRotatePt, fSin, fCos );
814 const Size& rOffset,
double fSin,
double fCos )
818 aRet.
Rotate( rRotatePt, fSin, fCos );
831 aVDev->EnableOutput(
false );
835 aVDev->DrawGradient( rPolyPoly, rGrad );
839 for(
i=0;
i < nAct; ++
i )
848 nAngle10 %= 3600_deg10;
849 nAngle10 = ( nAngle10 < 0_deg10 ) ? (
Degree10(3599) + nAngle10 ) : nAngle10;
856 const double fAngle =
toRadians(nAngle10);
857 const double fSin = sin( fAngle );
858 const double fCos = cos( fAngle );
864 aMapVDev->EnableOutput(
false );
870 const Size aOffset( -aNewBound.
Left(), -aNewBound.
Top() );
872 Point aRotAnchor( aOrigin );
873 Size aRotOffset( aOffset );
879 switch( nActionType )
1086 if( pCommentAct->
GetComment() ==
"XGRAD_SEQ_BEGIN" )
1088 int nBeginComments( 1 );
1113 if( !nBeginComments )
1116 else if( pAct->
GetComment() ==
"XGRAD_SEQ_BEGIN" )
1129 bool bPathStroke = (pCommentAct->
GetComment() ==
"XPATHSTROKE_SEQ_BEGIN");
1130 if ( bPathStroke || pCommentAct->
GetComment() ==
"XPATHFILL_SEQ_BEGIN" )
1160 else if ( pCommentAct->
GetComment() ==
"XPATHSTROKE_SEQ_END"
1161 || pCommentAct->
GetComment() ==
"XPATHFILL_SEQ_END" )
1163 pAction->Execute( aMapVDev.
get() );
1196 aTransMtf.
Rotate( nAngle10 );
1209 aEPSMtf.
Rotate( nAngle10 );
1233 aRotOffset, fSin, fCos )) ) );
1277 OSL_FAIL(
"GDIMetaFile::Rotate(): unsupported action" );
1283 pAction->Execute( aMapVDev.
get() );
1308 const std::vector<tools::Rectangle>& i_rClipStack )
1311 if( ! i_rInBounds.
IsEmpty() && ! i_rClipStack.empty() && ! i_rClipStack.back().IsEmpty() )
1316 if( ! o_rOutBounds.
IsEmpty() )
1317 o_rOutBounds.
Union( aBounds );
1319 o_rOutBounds = aBounds;
1326 aMapVDev->EnableOutput(
false );
1330 std::vector<vcl::PushFlags> aPushFlagStack;
1340 switch( nActionType )
1453 aRect.
Move( aPt.
X(), aPt.
Y() );
1466 aRect.
Move( aPt.
X(), aPt.
Y() );
1479 aRect.
Move( aPt.
X(), aPt.
Y() );
1488 static constexpr OUStringLiteral pStr =
u"\u00c4g";
1489 OUString
aStr( pStr );
1492 aMapVDev->GetTextBoundRect( aRect,
aStr, 0, 0,
aStr.getLength() );
1494 aRect.
Move( aPt.
X(), aPt.
Y() );
1602 if( aClipStack.back().IsEmpty() )
1603 aClipStack.back() = aRect;
1613 if( aClipStack.back().IsEmpty() )
1614 aClipStack.back() = aRect;
1679 if( ! aClipStack.back().IsEmpty() )
1683 aClipStack.back().Move( aDelta.
Width(), aDelta.
Width() );
1695 aPushFlagStack.push_back( pAct->
GetFlags() );
1699 aClipStack.push_back( aRect );
1705 if( ! aPushFlagStack.empty() )
1709 if( aClipStack.size() > 1 )
1710 aClipStack.pop_back();
1712 aPushFlagStack.pop_back();
1725 static_cast<const ImplColAdjustParam*
>(pColParam)->pMapR[ rColor.
GetRed() ],
1726 static_cast<const ImplColAdjustParam*
>(pColParam)->pMapG[ rColor.
GetGreen() ],
1727 static_cast<const ImplColAdjustParam*
>(pColParam)->pMapB[ rColor.
GetBlue() ] );
1733 const ImplBmpAdjustParam*
p =
static_cast<const ImplBmpAdjustParam*
>(pBmpParam);
1736 aRet.
Adjust(
p->nLuminancePercent,
p->nContrastPercent,
1737 p->nChannelRPercent,
p->nChannelGPercent,
p->nChannelBPercent,
1738 p->fGamma,
p->bInvert );
1748 cLum = ( cLum < 128 ) ? 0 : 255;
1757 aRet.
Convert(
static_cast<const ImplBmpConvertParam*
>(pBmpParam)->eConversion );
1764 return static_cast<const ImplColMonoParam*
>(pColParam)->aColor;
1772 aPal[ 2 ] =
static_cast<const ImplBmpMonoParam*
>(pBmpParam)->aColor;
1775 aBmp.
Erase(
static_cast<const ImplBmpMonoParam*
>(pBmpParam)->aColor );
1787 for(
sal_uLong i = 0; i < static_cast<const ImplColReplaceParam*>(pColParam)->nCount;
i++ )
1789 if( (
static_cast<const ImplColReplaceParam*
>(pColParam)->pMinR[
i ] <= nR ) &&
1790 (
static_cast<const ImplColReplaceParam*
>(pColParam)->pMaxR[
i ] >= nR ) &&
1791 (
static_cast<const ImplColReplaceParam*
>(pColParam)->pMinG[
i ] <= nG ) &&
1792 (
static_cast<const ImplColReplaceParam*
>(pColParam)->pMaxG[
i ] >= nG ) &&
1793 (
static_cast<const ImplColReplaceParam*
>(pColParam)->pMinB[
i ] <= nB ) &&
1794 (
static_cast<const ImplColReplaceParam*
>(pColParam)->pMaxB[
i ] >= nB ) )
1796 return static_cast<const ImplColReplaceParam*
>(pColParam)->pDstCols[
i ];
1805 const ImplBmpReplaceParam*
p =
static_cast<const ImplBmpReplaceParam*
>(pBmpParam);
1808 aRet.
Replace(
p->pSrcCols,
p->pDstCols,
p->nCount );
1937 OSL_FAIL(
"Don't use bitmap actions of this type in metafiles!" );
1983 pFncCol( pAct->
GetColor(), pColParam ) )
1994 pFncCol( pAct->
GetColor(), pColParam ) )
2068 short nChannelRPercent,
short nChannelGPercent,
2069 short nChannelBPercent,
double fGamma,
bool bInvert,
bool msoBrightness )
2072 if( !(nLuminancePercent || nContrastPercent ||
2073 nChannelRPercent || nChannelGPercent || nChannelBPercent ||
2074 ( fGamma != 1.0 ) || bInvert) )
2077 double fM, fROff, fGOff, fBOff, fOff;
2078 ImplColAdjustParam aColParam;
2079 ImplBmpAdjustParam aBmpParam;
2081 aColParam.pMapR.reset(
new sal_uInt8[ 256 ]);
2082 aColParam.pMapG.reset(
new sal_uInt8[ 256 ]);
2083 aColParam.pMapB.reset(
new sal_uInt8[ 256 ]);
2086 if( nContrastPercent >= 0 )
2087 fM = 128.0 / ( 128.0 - 1.27 *
MinMax( nContrastPercent, 0, 100 ) );
2089 fM = ( 128.0 + 1.27 *
MinMax( nContrastPercent, -100, 0 ) ) / 128.0;
2093 fOff =
MinMax( nLuminancePercent, -100, 100 ) * 2.55 + 128.0 - fM * 128.0;
2095 fOff =
MinMax( nLuminancePercent, -100, 100 ) * 2.55;
2098 fROff = nChannelRPercent * 2.55 + fOff;
2099 fGOff = nChannelGPercent * 2.55 + fOff;
2100 fBOff = nChannelBPercent * 2.55 + fOff;
2103 fGamma = ( fGamma <= 0.0 || fGamma > 10.0 ) ? 1.0 : ( 1.0 / fGamma );
2104 const bool bGamma = ( fGamma != 1.0 );
2117 aColParam.pMapR[ nX ] =
static_cast<sal_uInt8>(
MinMax(
FRound( (nX+fROff/2-128) * fM + 128 + fROff/2 ), 0, 255 ));
2118 aColParam.pMapG[ nX ] =
static_cast<sal_uInt8>(
MinMax(
FRound( (nX+fGOff/2-128) * fM + 128 + fGOff/2 ), 0, 255 ));
2119 aColParam.pMapB[ nX ] =
static_cast<sal_uInt8>(
MinMax(
FRound( (nX+fBOff/2-128) * fM + 128 + fBOff/2 ), 0, 255 ));
2123 aColParam.pMapR[ nX ] =
GAMMA( aColParam.pMapR[ nX ], fGamma );
2124 aColParam.pMapG[ nX ] =
GAMMA( aColParam.pMapG[ nX ], fGamma );
2125 aColParam.pMapB[ nX ] =
GAMMA( aColParam.pMapB[ nX ], fGamma );
2130 aColParam.pMapR[ nX ] = ~aColParam.pMapR[ nX ];
2131 aColParam.pMapG[ nX ] = ~aColParam.pMapG[ nX ];
2132 aColParam.pMapB[ nX ] = ~aColParam.pMapB[ nX ];
2136 aBmpParam.nLuminancePercent = nLuminancePercent;
2137 aBmpParam.nContrastPercent = nContrastPercent;
2138 aBmpParam.nChannelRPercent = nChannelRPercent;
2139 aBmpParam.nChannelGPercent = nChannelGPercent;
2140 aBmpParam.nChannelBPercent = nChannelBPercent;
2141 aBmpParam.fGamma = fGamma;
2142 aBmpParam.bInvert = bInvert;
2150 ImplColConvertParam aColParam;
2151 ImplBmpConvertParam aBmpParam;
2153 aColParam.eConversion = eConversion;
2161 ImplColReplaceParam aColParam;
2162 ImplBmpReplaceParam aBmpParam;
2164 aColParam.pMinR.reset(
new sal_uLong[ nColorCount ]);
2165 aColParam.pMaxR.reset(
new sal_uLong[ nColorCount ]);
2166 aColParam.pMinG.reset(
new sal_uLong[ nColorCount ]);
2167 aColParam.pMaxG.reset(
new sal_uLong[ nColorCount ]);
2168 aColParam.pMinB.reset(
new sal_uLong[ nColorCount ]);
2169 aColParam.pMaxB.reset(
new sal_uLong[ nColorCount ]);
2175 nVal = pSearchColors[
i ].
GetRed();
2183 nVal = pSearchColors[
i ].
GetBlue();
2188 aColParam.pDstCols = pReplaceColors;
2189 aColParam.nCount = nColorCount;
2191 aBmpParam.pSrcCols = pSearchColors;
2192 aBmpParam.pDstCols = pReplaceColors;
2193 aBmpParam.nCount = nColorCount;
2202 ImplColMonoParam aColParam;
2203 ImplBmpMonoParam aBmpParam;
2205 aColParam.aColor = rColor;
2206 aBmpParam.aColor = rColor;
2245 for( sal_uInt16
n = 0;
n < rPolyPoly.
Count(); ++
n )
2246 nSizeBytes += ( rPolyPoly[
n ].GetSize() *
sizeof(
Point ) );
2260 nSizeBytes += ( pTextArrayAction->
GetLen() << 2 );
2278 const Point aNullPt;
2282 Size aSizePix( std::abs( aBRPix.
X() - aTLPix.
X() ) + 1, std::abs( aBRPix.
Y() - aTLPix.
Y() ) + 1 );
2283 sal_uInt32 nMaximumExtent = 512;
2291 && ( sal::static_int_cast< tools::ULong >(aSizePix.
Width()) >
2293 sal::static_int_cast< tools::ULong >(aSizePix.
Height()) >
2296 const Size aOldSizePix( aSizePix );
2297 double fWH =
static_cast< double >( aSizePix.
Width() ) / aSizePix.
Height();
2306 aSizePix.
setWidth( nMaximumExtent );
2317 if (aVDev->SetOutputSizePixel(aAntialiasSize))
2327 BitmapEx aBitmap( aVDev->GetBitmapEx( aNullPt, aVDev->GetOutputSizePixel() ) );
2330 aBitmap.
Scale(aDrawSize, nScaleFlag);
2335 aBitmap.
Convert(eColorConversion);
2337 rBitmapEx = aBitmap;
2350 SvFileStream aStream(pFileName ? OUString::fromUtf8(pFileName) : OUString(
"file:///tmp/metafile.xml"),
2351 StreamMode::STD_READWRITE | StreamMode::TRUNC);
2352 assert(aStream.
good());
2354 aDumper.
dump(*
this, aStream);
bool TooLargeScaleForMapMode(const Fraction &rScale, int nDPI)
static vcl::Window * GetActiveTopWindow()
Get the "active" top window.
static vcl::Window * GetFirstTopLevelWindow()
Get the first top-level window of the application.
const AlphaMask & GetAlphaMask() const
sal_Int64 GetSizeBytes() const
bool Scale(const Size &rNewSize, BmpScaleFlag nScaleFlag=BmpScaleFlag::Default)
Scale the bitmap.
bool Convert(BmpConversion eConversion)
Convert bitmap format.
bool Rotate(Degree10 nAngle10, const Color &rFillColor)
Rotate bitmap by the specified angle.
void Replace(const Color &rSearchColor, const Color &rReplaceColor)
Replace all pixel having the search color with the specified color.
bool Create(const css::uno::Reference< css::rendering::XBitmapCanvas > &xBitmapCanvas, const Size &rSize)
populate from a canvas implementation
bool Crop(const tools::Rectangle &rRectPixel)
Crop the bitmap.
bool Adjust(short nLuminancePercent, short nContrastPercent, short nChannelRPercent, short nChannelGPercent, short nChannelBPercent, double fGamma=1.0, bool bInvert=false, bool msoBrightness=false)
Change various global color characteristics.
const Size & GetSizePixel() const
Size GetSizePixel() const
bool Erase(const Color &rFillColor)
Fill the entire bitmap with the given color.
sal_uInt8 GetLuminance() const
sal_uInt8 GetBlue() const
sal_uInt8 GetAlpha() const
sal_uInt8 GetGreen() const
void ReduceInaccurate(unsigned nSignificantBits)
const Color & GetEndColor() const
const Color & GetStartColor() const
void SetStartColor(const Color &rColor)
void SetEndColor(const Color &rColor)
void SetAngle(Degree10 nAngle10)
Degree10 GetAngle() const
void SetColor(const Color &rColor)
const Color & GetColor() const
void SetOrigin(const Point &rOrigin)
void SetScaleY(const Fraction &rScaleY)
const Fraction & GetScaleX() const
MapUnit GetMapUnit() const
const Fraction & GetScaleY() const
void SetScaleX(const Fraction &rScaleX)
sal_uInt32 GetWidth() const
sal_Int32 GetIndex() const
const OUString & GetText() const
const Point & GetPoint() const
const Point & GetPoint() const
const OUString & GetText() const
sal_Int32 GetIndex() const
sal_Int32 GetIndex() const
const KernArray & GetDXArray() const
const OUString & GetText() const
const Point & GetPoint() const
const std::vector< sal_Bool > & GetKashidaArray() const
const Color & GetColor() const
const Color & GetColor() const
const Point & GetStartPoint() const
tools::Long GetWidth() const
FontLineStyle GetUnderline() const
FontLineStyle GetOverline() const
FontStrikeout GetStrikeout() const
const Color & GetColor() const
const tools::Rectangle & GetRect() const
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Size GetOutputSize() const
SAL_DLLPRIVATE sal_Int32 GetDPIX() const
Get the output device's DPI x-axis value.
GDIMetaFile * GetConnectMetaFile() const
void DrawBitmapEx(const Point &rDestPt, const BitmapEx &rBitmapEx)
SAL_WARN_UNUSED_RESULT Size GetPixelOffset() const
Get the offset in pixel.
virtual void SetMetafileMapMode(const MapMode &rNewMapMode, bool bIsRecord)
SAL_DLLPRIVATE sal_Int32 GetDPIY() const
Get the output device's DPI y-axis value.
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
Size GetOutputSizePixel() const
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
void SetPixelOffset(const Size &rOffset)
Set an offset in pixel.
void SetDigitLanguage(LanguageType)
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
virtual size_t GetSyncCount() const
const MapMode & GetMapMode() const
void Push(vcl::PushFlags nFlags=vcl::PushFlags::ALL)
css::uno::Reference< css::rendering::XCanvas > GetCanvas() const
request XCanvas render interface
void SetLayoutMode(vcl::text::ComplexTextLayoutFlags nTextLayoutMode)
virtual vcl::Window * GetOwnerWindow() const
Get the vcl::Window that this OutputDevice belongs to, if any.
constexpr tools::Long Y() const
constexpr tools::Long X() const
constexpr tools::Long Height() const
void setWidth(tools::Long nWidth)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
Encapsulates geometry and associated attributes of a filled area.
void getPath(tools::PolyPolygon &) const
Query path to fill.
void setPath(const tools::PolyPolygon &rPath)
Set path to fill.
Encapsulates geometry and associated attributes of a graphical 'pen stroke'.
void getPath(tools::Polygon &) const
Query path to stroke.
void setPath(const tools::Polygon &)
Set path to stroke.
reference_type * get() const
Get the body.
const BitmapEx & GetBitmap() const
const Color & GetColor() const
void SetGradient(const Gradient &rGradient)
void SetBitmap(const BitmapEx &rBitmap)
Gradient GetGradient() const
void SetColor(const Color &rColor)
void SetOrientation(Degree10 nLineOrientation)
void SetFillColor(const Color &)
void SetColor(const Color &)
const Color & GetColor() const
Degree10 GetOrientation() const
const Color & GetFillColor() const
tools::PolyPolygon GetAsPolyPolygon() const
void Intersect(const tools::Rectangle &rRegion)
bool HasPolyPolygonOrB2DPolyPolygon() const
tools::Rectangle GetBoundRect() const
::OutputDevice const * GetOutDev() const
constexpr ::Color COL_WHITE(0xFF, 0xFF, 0xFF)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
#define TOOLS_WARN_EXCEPTION(area, stream)
static void ImplActionBounds(tools::Rectangle &o_rOutBounds, const tools::Rectangle &i_rInBounds, const std::vector< tools::Rectangle > &i_rClipStack)
Color(* ColorExchangeFnc)(const Color &rColor, const void *pColParam)
BitmapEx(* BmpExchangeFnc)(const BitmapEx &rBmpEx, const void *pBmpParam)
tools::Long FRound(double fVal)
std::enable_if< std::is_signed< T >::value||std::is_floating_point< T >::value, long >::type MinMax(T nVal, tools::Long nMin, tools::Long nMax)
#define GAMMA(_def_cVal, _def_InvGamma)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
Reference< XComponentContext > getProcessComponentContext()
BitmapEx GetBitmapEx(BitmapEx const &rBitmapEx, DrawModeFlags nDrawMode)
HashMap_OWString_Interface aMap