diff options
author | Louis-Francis Ratté-Boulianne <lfrb@collabora.com> | 2014-12-03 17:02:37 -0500 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-12-15 22:47:05 +0100 |
commit | 313e89f9fbb1aa0da148d4d75be649327d67d8f7 (patch) | |
tree | f73303acb395df982ac2fc6d42aad04949a502a1 /include | |
parent | e2b093f66e2613ad1a85c662159f57df4bc96a67 (diff) |
vcl: Add BitmapInfoAccess for bitmaps' metadata access
Change-Id: Iec9f8c7d8f7cded0aef9e017373e44387dc0b05c
Diffstat (limited to 'include')
-rw-r--r-- | include/vcl/bitmap.hxx | 4 | ||||
-rw-r--r-- | include/vcl/bmpacc.hxx | 120 | ||||
-rw-r--r-- | include/vcl/salbtype.hxx | 10 |
3 files changed, 85 insertions, 49 deletions
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx index 3f6ceeff6913..1ce448133367 100644 --- a/include/vcl/bitmap.hxx +++ b/include/vcl/bitmap.hxx @@ -293,6 +293,7 @@ private: } }; +class BitmapInfoAccess; class BitmapReadAccess; class BitmapWriteAccess; class BitmapPalette; @@ -849,9 +850,10 @@ public: public: + BitmapInfoAccess* AcquireInfoAccess(); BitmapReadAccess* AcquireReadAccess(); BitmapWriteAccess* AcquireWriteAccess(); - void ReleaseAccess( BitmapReadAccess* pAccess ); + void ReleaseAccess( BitmapInfoAccess* pAccess ); typedef vcl::ScopedBitmapAccess< BitmapReadAccess, Bitmap, &Bitmap::AcquireReadAccess > ScopedReadAccess; diff --git a/include/vcl/bmpacc.hxx b/include/vcl/bmpacc.hxx index 252599b5f76c..bc43dbf175a9 100644 --- a/include/vcl/bmpacc.hxx +++ b/include/vcl/bmpacc.hxx @@ -62,14 +62,14 @@ typedef BitmapColor (*FncGetPixel)( ConstScanline pScanline, long nX, const Colo typedef void (*FncSetPixel)( Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask ); -// - BitmapReadAccess - -class VCL_DLLPUBLIC BitmapReadAccess +// - BitmapInfoAccess - +class VCL_DLLPUBLIC BitmapInfoAccess { - friend class BitmapWriteAccess; + friend class BitmapReadAccess; public: - BitmapReadAccess( Bitmap& rBitmap ); - virtual ~BitmapReadAccess(); + BitmapInfoAccess( Bitmap& rBitmap ); + virtual ~BitmapInfoAccess(); inline bool operator!() const; @@ -87,9 +87,6 @@ public: inline sal_uInt16 GetBitCount() const; inline BitmapColor GetBestMatchingColor( const BitmapColor& rBitmapColor ); - inline Scanline GetBuffer() const; - inline Scanline GetScanline( long nY ) const; - inline bool HasPalette() const; inline const BitmapPalette& GetPalette() const; inline sal_uInt16 GetPaletteEntryCount() const; @@ -100,6 +97,38 @@ public: inline bool HasColorMask() const; inline ColorMask& GetColorMask() const; +private: + + BitmapInfoAccess() {} + BitmapInfoAccess( const BitmapInfoAccess& ) {} + BitmapInfoAccess& operator=( const BitmapInfoAccess& ) { return *this; } + +protected: + Bitmap maBitmap; + BitmapBuffer* mpBuffer; + ColorMask maColorMask; + BitmapAccessMode mnAccessMode; + + SAL_DLLPRIVATE void ImplCreate( Bitmap& rBitmap ); + SAL_DLLPRIVATE void ImplDestroy(); + +protected: + BitmapInfoAccess( Bitmap& rBitmap, BitmapAccessMode nMode ); + +}; + +// - BitmapReadAccess - +class VCL_DLLPUBLIC BitmapReadAccess : public BitmapInfoAccess +{ + friend class BitmapWriteAccess; + +public: + BitmapReadAccess( Bitmap& rBitmap ); + virtual ~BitmapReadAccess(); + + inline Scanline GetBuffer() const; + inline Scanline GetScanline( long nY ) const; + inline BitmapColor GetPixelFromData( const sal_uInt8* pData, long nX ) const; inline void SetPixelOnData( sal_uInt8* pData, long nX, const BitmapColor& rBitmapColor ); inline BitmapColor GetPixel( long nY, long nX ) const; @@ -117,21 +146,16 @@ public: private: BitmapReadAccess() {} - BitmapReadAccess( const BitmapReadAccess& ) {} + BitmapReadAccess( const BitmapReadAccess& ) : BitmapInfoAccess() {} BitmapReadAccess& operator=( const BitmapReadAccess& ) { return *this; } protected: - Bitmap maBitmap; - BitmapBuffer* mpBuffer; Scanline* mpScanBuf; - ColorMask maColorMask; FncGetPixel mFncGetPixel; FncSetPixel mFncSetPixel; - bool mbModify; - - SAL_DLLPRIVATE void ImplCreate( Bitmap& rBitmap ); - SAL_DLLPRIVATE void ImplDestroy(); + SAL_DLLPRIVATE void ImplInitScanBuffer( Bitmap& rBitmap ); + SAL_DLLPRIVATE void ImplClearScanBuffer(); SAL_DLLPRIVATE bool ImplSetAccessPointers( sal_uLong nFormat ); public: @@ -158,7 +182,7 @@ public: DECL_FORMAT( _32BIT_TC_MASK ) protected: - BitmapReadAccess( Bitmap& rBitmap, bool bModify ); + BitmapReadAccess( Bitmap& rBitmap, BitmapAccessMode nMode ); }; @@ -206,61 +230,61 @@ private: }; // - Inlines - -inline bool BitmapReadAccess::operator!() const +inline bool BitmapInfoAccess::operator!() const { return( mpBuffer == NULL ); } -inline long BitmapReadAccess::Width() const +inline long BitmapInfoAccess::Width() const { return( mpBuffer ? mpBuffer->mnWidth : 0L ); } -inline long BitmapReadAccess::Height() const +inline long BitmapInfoAccess::Height() const { return( mpBuffer ? mpBuffer->mnHeight : 0L ); } -inline Point BitmapReadAccess::TopLeft() const +inline Point BitmapInfoAccess::TopLeft() const { return Point(); } -inline Point BitmapReadAccess::BottomRight() const +inline Point BitmapInfoAccess::BottomRight() const { return Point( Width() - 1L, Height() - 1L ); } -inline bool BitmapReadAccess::IsTopDown() const +inline bool BitmapInfoAccess::IsTopDown() const { assert(mpBuffer && "Access is not valid!"); return mpBuffer && ( BMP_SCANLINE_ADJUSTMENT( mpBuffer->mnFormat ) == BMP_FORMAT_TOP_DOWN ); } -inline bool BitmapReadAccess::IsBottomUp() const +inline bool BitmapInfoAccess::IsBottomUp() const { return !IsTopDown(); } -inline sal_uLong BitmapReadAccess::GetScanlineFormat() const +inline sal_uLong BitmapInfoAccess::GetScanlineFormat() const { assert(mpBuffer && "Access is not valid!"); return( mpBuffer ? BMP_SCANLINE_FORMAT( mpBuffer->mnFormat ) : 0UL ); } -inline sal_uLong BitmapReadAccess::GetScanlineSize() const +inline sal_uLong BitmapInfoAccess::GetScanlineSize() const { assert(mpBuffer && "Access is not valid!"); return( mpBuffer ? mpBuffer->mnScanlineSize : 0UL ); } -inline sal_uInt16 BitmapReadAccess::GetBitCount() const +inline sal_uInt16 BitmapInfoAccess::GetBitCount() const { assert(mpBuffer && "Access is not valid!"); return( mpBuffer ? mpBuffer->mnBitCount : 0 ); } -inline BitmapColor BitmapReadAccess::GetBestMatchingColor( const BitmapColor& rBitmapColor ) +inline BitmapColor BitmapInfoAccess::GetBestMatchingColor( const BitmapColor& rBitmapColor ) { if( HasPalette() ) return BitmapColor( (sal_uInt8) GetBestPaletteIndex( rBitmapColor ) ); @@ -268,50 +292,37 @@ inline BitmapColor BitmapReadAccess::GetBestMatchingColor( const BitmapColor& rB return rBitmapColor; } -inline Scanline BitmapReadAccess::GetBuffer() const -{ - assert(mpBuffer && "Access is not valid!"); - return( mpBuffer ? mpBuffer->mpBits : NULL ); -} - -inline Scanline BitmapReadAccess::GetScanline( long nY ) const -{ - assert(mpBuffer && "Access is not valid!"); - assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!"); - return( mpBuffer ? mpScanBuf[ nY ] : NULL ); -} - -inline bool BitmapReadAccess::HasPalette() const +inline bool BitmapInfoAccess::HasPalette() const { assert(mpBuffer && "Access is not valid!"); return( mpBuffer && !!mpBuffer->maPalette ); } -inline const BitmapPalette& BitmapReadAccess::GetPalette() const +inline const BitmapPalette& BitmapInfoAccess::GetPalette() const { assert(mpBuffer && "Access is not valid!"); return mpBuffer->maPalette; } -inline sal_uInt16 BitmapReadAccess::GetPaletteEntryCount() const +inline sal_uInt16 BitmapInfoAccess::GetPaletteEntryCount() const { assert(HasPalette() && "Bitmap has no palette!"); return( HasPalette() ? mpBuffer->maPalette.GetEntryCount() : 0 ); } -inline const BitmapColor& BitmapReadAccess::GetPaletteColor( sal_uInt16 nColor ) const +inline const BitmapColor& BitmapInfoAccess::GetPaletteColor( sal_uInt16 nColor ) const { assert(mpBuffer && "Access is not valid!"); assert(HasPalette() && "Bitmap has no palette!"); return mpBuffer->maPalette[ nColor ]; } -inline const BitmapColor& BitmapReadAccess::GetBestPaletteColor( const BitmapColor& rBitmapColor ) const +inline const BitmapColor& BitmapInfoAccess::GetBestPaletteColor( const BitmapColor& rBitmapColor ) const { return GetPaletteColor( GetBestPaletteIndex( rBitmapColor ) ); } -inline bool BitmapReadAccess::HasColorMask() const +inline bool BitmapInfoAccess::HasColorMask() const { assert(mpBuffer && "Access is not valid!"); const sal_uLong nFormat = BMP_SCANLINE_FORMAT( mpBuffer->mnFormat ); @@ -323,12 +334,25 @@ inline bool BitmapReadAccess::HasColorMask() const nFormat == BMP_FORMAT_32BIT_TC_MASK ); } -inline ColorMask& BitmapReadAccess::GetColorMask() const +inline ColorMask& BitmapInfoAccess::GetColorMask() const { assert(mpBuffer && "Access is not valid!"); return mpBuffer->maColorMask; } +inline Scanline BitmapReadAccess::GetBuffer() const +{ + assert(mpBuffer && "Access is not valid!"); + return( mpBuffer ? mpBuffer->mpBits : NULL ); +} + +inline Scanline BitmapReadAccess::GetScanline( long nY ) const +{ + assert(mpBuffer && "Access is not valid!"); + assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!"); + return( mpBuffer ? mpScanBuf[ nY ] : NULL ); +} + inline BitmapColor BitmapReadAccess::GetPixel( long nY, long nX ) const { assert(mpBuffer && "Access is not valid!"); diff --git a/include/vcl/salbtype.hxx b/include/vcl/salbtype.hxx index 9859aa3f1b83..d4ccb94f0649 100644 --- a/include/vcl/salbtype.hxx +++ b/include/vcl/salbtype.hxx @@ -268,6 +268,16 @@ struct VCL_DLLPUBLIC BitmapBuffer }; +// - Access modes - +typedef enum +{ + BITMAP_INFO_ACCESS, + BITMAP_READ_ACCESS, + BITMAP_WRITE_ACCESS +} +BitmapAccessMode; + + // - StretchAndConvert - |