43 maSize(rBitmap->GetWidth(),rBitmap->GetHeight()),
61 mpBitmap = std::make_shared<Gdiplus::Bitmap>(
64 PixelFormat32bppARGB);
68 mpBitmap = std::make_shared<Gdiplus::Bitmap>(
98 const geometry::IntegerRectangle2D& rect )
100 uno::Sequence< sal_Int8 > aRes( (rect.X2-rect.X1)*(rect.Y2-rect.Y1)*4 );
105 aBmpData.Width = rect.X2-rect.X1;
106 aBmpData.Height = rect.Y2-rect.Y1;
107 aBmpData.Stride = 4*aBmpData.Width;
108 aBmpData.PixelFormat = PixelFormat32bppARGB;
109 aBmpData.Scan0 = aRes.getArray();
114 if( Gdiplus::Ok !=
mpBitmap->LockBits( &aRect,
115 Gdiplus::ImageLockModeRead | Gdiplus::ImageLockModeUserInputBuf,
116 PixelFormat32bppARGB,
123 return uno::Sequence< sal_Int8 >();
132 const rendering::IntegerBitmapLayout& ,
133 const geometry::IntegerRectangle2D& rect )
138 aBmpData.Width = rect.X2-rect.X1;
139 aBmpData.Height = rect.Y2-rect.Y1;
140 aBmpData.Stride = 4*aBmpData.Width;
141 aBmpData.PixelFormat = PixelFormat32bppARGB;
142 aBmpData.Scan0 =
const_cast<sal_Int8 *
>(data.getConstArray());
149 if( Gdiplus::Ok !=
mpBitmap->LockBits( &aRect,
150 Gdiplus::ImageLockModeWrite | Gdiplus::ImageLockModeUserInputBuf,
151 PixelFormat32bppARGB,
157 throw uno::RuntimeException();
165 const rendering::IntegerBitmapLayout& ,
166 const geometry::IntegerPoint2D& pos )
171 "CanvasHelper::setPixel: X coordinate out of bounds" );
172 ENSURE_ARG_OR_THROW( pos.Y >= 0 && pos.Y < aSize.Height,
173 "CanvasHelper::setPixel: Y coordinate out of bounds" );
174 ENSURE_ARG_OR_THROW( color.getLength() > 3,
175 "CanvasHelper::setPixel: not enough color components" );
177 if( Gdiplus::Ok !=
mpBitmap->SetPixel( pos.X, pos.Y,
180 throw uno::RuntimeException();
185 const geometry::IntegerPoint2D& pos )
190 "CanvasHelper::getPixel: X coordinate out of bounds" );
191 ENSURE_ARG_OR_THROW( pos.Y >= 0 && pos.Y < aSize.Height,
192 "CanvasHelper::getPixel: Y coordinate out of bounds" );
194 Gdiplus::Color aColor;
196 if( Gdiplus::Ok !=
mpBitmap->GetPixel( pos.X, pos.Y, &aColor ) )
197 return uno::Sequence< sal_Int8 >();
::basegfx::B2IVector maSize
css::uno::Sequence< sal_Int8 > getPixel(css::rendering::IntegerBitmapLayout &bitmapLayout, const css::geometry::IntegerPoint2D &pos) override
virtual bool hasAlpha() const override
virtual GraphicsSharedPtr getGraphics() override
void setData(const css::uno::Sequence< sal_Int8 > &data, const css::rendering::IntegerBitmapLayout &bitmapLayout, const css::geometry::IntegerRectangle2D &rect) override
css::uno::Sequence< sal_Int8 > getData(css::rendering::IntegerBitmapLayout &bitmapLayout, const css::geometry::IntegerRectangle2D &rect) override
virtual BitmapSharedPtr getBitmap() const override
virtual ::basegfx::B2IVector getSize() const override
GraphicsSharedPtr mpGraphics
HRESULT createInstance(REFIID iid, Ifc **ppIfc)
Gdiplus::BitmapData aBmpData
#define ENSURE_ARG_OR_THROW(c, m)
void setPixel(const css::uno::Sequence< sal_Int8 > &color, const css::rendering::IntegerBitmapLayout &bitmapLayout, const css::geometry::IntegerPoint2D &pos) override
std::shared_ptr< Gdiplus::Bitmap > BitmapSharedPtr
GraphicsSharedPtr mpGraphics
DXBitmap(const BitmapSharedPtr &rBitmap, bool bWithAlpha)
::basegfx::B2IVector maSize
std::shared_ptr< Gdiplus::Graphics > GraphicsSharedPtr