1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #ifndef INCLUDED_VCL_BITMAP_TOOLS_HXX
11 #define INCLUDED_VCL_BITMAP_TOOLS_HXX
13 #include <config_cairo_canvas.h>
14 #include <vcl/bitmapex.hxx>
15 #include <vcl/ImageTree.hxx>
16 #if ENABLE_CAIRO_CANVAS
17 #include <vcl/cairo.hxx>
19 #include <basegfx/range/b2drectangle.hxx>
21 #include <vcl/RawBitmap.hxx>
24 namespace basegfx
{ class B2DHomMatrix
; }
25 namespace com::sun::star::geometry
{ struct IntegerRectangle2D
; }
27 namespace vcl::bitmap
{
29 typedef std::array
<std::array
<sal_uInt8
, 256>, 256> lookup_table
;
31 VCL_DLLPUBLIC lookup_table
const & get_premultiply_table();
32 VCL_DLLPUBLIC lookup_table
const & get_unpremultiply_table();
34 sal_uInt8
unpremultiply(sal_uInt8 c
, sal_uInt8 a
);
35 sal_uInt8
premultiply(sal_uInt8 c
, sal_uInt8 a
);
37 BitmapEx VCL_DLLPUBLIC
loadFromName(const OUString
& rFileName
, const ImageLoadFlags eFlags
= ImageLoadFlags::NONE
);
39 void loadFromSvg(SvStream
& rStream
, const OUString
& sPath
, BitmapEx
& rBitmapEx
, double fScaleFactor
);
41 /** Copy block of image data into the bitmap.
42 Assumes that the Bitmap has been constructed with the desired size.
45 The block of data to copy
47 The number of bytes in a scanline, must be >= (width * bitcount / 8)
49 BitmapEx VCL_DLLPUBLIC
CreateFromData(sal_uInt8
const *pData
,
50 sal_Int32 nWidth
, sal_Int32 nHeight
, sal_Int32 nStride
,
51 vcl::PixelFormat ePixelFormat
,
52 bool bReversColors
= false, bool bReverseAlpha
= false);
54 BitmapEx VCL_DLLPUBLIC
CreateFromData( RawBitmap
&& data
);
56 #if ENABLE_CAIRO_CANVAS
57 VCL_DLLPUBLIC BitmapEx
* CreateFromCairoSurface(Size size
, cairo_surface_t
* pSurface
);
60 VCL_DLLPUBLIC BitmapEx
CanvasTransformBitmap( const BitmapEx
& rBitmap
,
61 const ::basegfx::B2DHomMatrix
& rTransform
,
62 ::basegfx::B2DRectangle
const & rDestRect
,
63 ::basegfx::B2DHomMatrix
const & rLocalTransform
);
65 VCL_DLLPUBLIC
void DrawAlphaBitmapAndAlphaGradient(BitmapEx
& rBitmapEx
, bool bFixedTransparence
, float fTransparence
, AlphaMask
& rNewMask
);
67 VCL_DLLPUBLIC
void DrawAndClipBitmap(const Point
& rPos
, const Size
& rSize
, const BitmapEx
& rBitmap
, BitmapEx
& aBmpEx
, basegfx::B2DPolyPolygon
const & rClipPath
);
69 VCL_DLLPUBLIC
css::uno::Sequence
< sal_Int8
> GetMaskDIB(BitmapEx
const & aBmpEx
);
72 * @param data will be filled with alpha data, if xBitmap is alpha/transparent image
73 * @param bHasAlpha will be set to true if resulting surface has alpha
75 VCL_DLLPUBLIC
void CanvasCairoExtractBitmapData( BitmapEx
const & rBmpEx
, Bitmap
& rBitmap
, unsigned char*& data
, bool& bHasAlpha
, tools::Long
& rnWidth
, tools::Long
& rnHeight
);
77 VCL_DLLPUBLIC
css::uno::Sequence
< sal_Int8
> CanvasExtractBitmapData(BitmapEx
const & rBitmapEx
, const css::geometry::IntegerRectangle2D
& rect
);
79 // helper to construct historical 8x8 bitmaps with two colors
81 BitmapEx VCL_DLLPUBLIC
createHistorical8x8FromArray(std::array
<sal_uInt8
,64> const & pArray
, Color aColorPix
, Color aColorBack
);
82 bool VCL_DLLPUBLIC
isHistorical8x8(const BitmapEx
& rBitmapEx
, Color
& o_rBack
, Color
& o_rFront
);
84 VCL_DLLPUBLIC
bool convertBitmap32To24Plus8(BitmapEx
const & rInput
, BitmapEx
& rResult
);
86 /** Retrieve downsampled and cropped bitmap
88 Takes destination size in twips units.
90 @attention This method ignores negative rDstSz values, thus
91 mirroring must happen outside this method (e.g. in DrawBitmap)
93 VCL_DLLPUBLIC Bitmap
GetDownsampledBitmap(Size
const& rDstSizeTwip
, Point
const& rSrcPt
, Size
const& rSrcSz
,
94 Bitmap
const& rBmp
, tools::Long nMaxBmpDPIX
, tools::Long nMaxBmpDPIY
);
98 #endif // INCLUDED_VCL_BITMAP_TOOLS_HXX
100 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */