diff options
-rw-r--r-- | include/vcl/bmpacc.hxx | 381 | ||||
-rw-r--r-- | vcl/source/gdi/bmpacc.cxx | 112 | ||||
-rw-r--r-- | vcl/source/gdi/bmpacc2.cxx | 65 |
3 files changed, 333 insertions, 225 deletions
diff --git a/include/vcl/bmpacc.hxx b/include/vcl/bmpacc.hxx index f2f139921b58..f0ab33b989f2 100644 --- a/include/vcl/bmpacc.hxx +++ b/include/vcl/bmpacc.hxx @@ -25,42 +25,9 @@ #include <vcl/salbtype.hxx> #include <vcl/bitmap.hxx> - -// - Access defines - -#define DECL_FORMAT_GETPIXEL( Format ) \ -static BitmapColor GetPixelFor##Format( ConstScanline pScanline, long nX, const ColorMask& rMask ); - -#define DECL_FORMAT_SETPIXEL( Format ) \ -static void SetPixelFor##Format( Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask ); - -#define DECL_FORMAT( Format ) \ -DECL_FORMAT_GETPIXEL( Format ) \ -DECL_FORMAT_SETPIXEL( Format ) - -#define IMPL_FORMAT_GETPIXEL( Format ) \ -BitmapColor BitmapReadAccess::GetPixelFor##Format( ConstScanline pScanline, long nX, const ColorMask& rMask ) - -#define IMPL_FORMAT_GETPIXEL_NOMASK( Format ) \ -BitmapColor BitmapReadAccess::GetPixelFor##Format( ConstScanline pScanline, long nX, const ColorMask& ) - -#define IMPL_FORMAT_SETPIXEL( Format ) \ -void BitmapReadAccess::SetPixelFor##Format( Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask ) - -#define IMPL_FORMAT_SETPIXEL_NOMASK( Format ) \ -void BitmapReadAccess::SetPixelFor##Format( Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& ) - -#define CASE_FORMAT( Format ) \ -case( BMP_FORMAT##Format ): \ -{ \ - mFncGetPixel = GetPixelFor##Format;\ - mFncSetPixel = SetPixelFor##Format;\ -} \ -break; - // - Access functions - -typedef BitmapColor (*FncGetPixel)( ConstScanline pScanline, long nX, const ColorMask& rMask ); -typedef void (*FncSetPixel)( Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask ); - +typedef BitmapColor (*FncGetPixel)(ConstScanline pScanline, long nX, const ColorMask& rMask); +typedef void (*FncSetPixel)(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); // - BitmapInfoAccess - class VCL_DLLPUBLIC BitmapInfoAccess @@ -68,53 +35,58 @@ class VCL_DLLPUBLIC BitmapInfoAccess friend class BitmapReadAccess; public: - BitmapInfoAccess( Bitmap& rBitmap ); - virtual ~BitmapInfoAccess(); + BitmapInfoAccess(Bitmap& rBitmap); + virtual ~BitmapInfoAccess(); - inline bool operator!() const; + inline bool operator!() const; - inline long Width() const; - inline long Height() const; - inline Point TopLeft() const; - inline Point BottomRight() const; + inline long Width() const; + inline long Height() const; + inline Point TopLeft() const; + inline Point BottomRight() const; - inline bool IsTopDown() const; - inline bool IsBottomUp() const; + inline bool IsTopDown() const; + inline bool IsBottomUp() const; - inline sal_uLong GetScanlineFormat() const; - inline sal_uLong GetScanlineSize() const; + inline sal_uLong GetScanlineFormat() const; + inline sal_uLong GetScanlineSize() const; - inline sal_uInt16 GetBitCount() const; - inline BitmapColor GetBestMatchingColor( const BitmapColor& rBitmapColor ); + inline sal_uInt16 GetBitCount() const; + inline BitmapColor GetBestMatchingColor(const BitmapColor& rBitmapColor); - inline bool HasPalette() const; + inline bool HasPalette() const; inline const BitmapPalette& GetPalette() const; - inline sal_uInt16 GetPaletteEntryCount() const; - inline const BitmapColor& GetPaletteColor( sal_uInt16 nColor ) const; - inline const BitmapColor& GetBestPaletteColor( const BitmapColor& rBitmapColor ) const; - sal_uInt16 GetBestPaletteIndex( const BitmapColor& rBitmapColor ) const; + inline sal_uInt16 GetPaletteEntryCount() const; + inline const BitmapColor& GetPaletteColor(sal_uInt16 nColor) const; + inline const BitmapColor& GetBestPaletteColor(const BitmapColor& rBitmapColor) const; + sal_uInt16 GetBestPaletteIndex(const BitmapColor& rBitmapColor) const; inline bool HasColorMask() const; inline ColorMask& GetColorMask() const; private: + BitmapInfoAccess() + {} - BitmapInfoAccess() {} - BitmapInfoAccess( const BitmapInfoAccess& ) {} - BitmapInfoAccess& operator=( const BitmapInfoAccess& ) { return *this; } + BitmapInfoAccess(const BitmapInfoAccess&) + {} + + BitmapInfoAccess& operator=(const BitmapInfoAccess&) + { + return *this; + } protected: - Bitmap maBitmap; - BitmapBuffer* mpBuffer; - ColorMask maColorMask; - BitmapAccessMode mnAccessMode; + Bitmap maBitmap; + BitmapBuffer* mpBuffer; + ColorMask maColorMask; + BitmapAccessMode mnAccessMode; - SAL_DLLPRIVATE void ImplCreate( Bitmap& rBitmap ); - SAL_DLLPRIVATE void ImplDestroy(); + SAL_DLLPRIVATE void ImplCreate(Bitmap& rBitmap); + SAL_DLLPRIVATE void ImplDestroy(); protected: - BitmapInfoAccess( Bitmap& rBitmap, BitmapAccessMode nMode ); - + BitmapInfoAccess(Bitmap& rBitmap, BitmapAccessMode nMode); }; // - BitmapReadAccess - @@ -123,126 +95,162 @@ class VCL_DLLPUBLIC BitmapReadAccess : public BitmapInfoAccess friend class BitmapWriteAccess; public: - BitmapReadAccess( Bitmap& rBitmap ); - virtual ~BitmapReadAccess(); + BitmapReadAccess(Bitmap& rBitmap); + virtual ~BitmapReadAccess(); + + inline Scanline GetBuffer() const; + inline Scanline GetScanline( long nY ) const; - 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 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; - inline BitmapColor GetColor( long nY, long nX ) const; - inline sal_uInt8 GetPixelIndex( long nY, long nX ) const; - inline sal_uInt8 GetLuminance( long nY, long nX ) const; + inline BitmapColor GetPixel( long nY, long nX ) const; + inline BitmapColor GetColor( long nY, long nX ) const; + inline sal_uInt8 GetPixelIndex( long nY, long nX ) const; + inline sal_uInt8 GetLuminance( long nY, long nX ) const; /** Get the interpolated color at coordinates fY, fX; if outside, return rFallback */ - BitmapColor GetInterpolatedColorWithFallback( double fY, double fX, const BitmapColor& rFallback ) const; + BitmapColor GetInterpolatedColorWithFallback( double fY, double fX, const BitmapColor& rFallback ) const; /** Get the color at coordinates fY, fX; if outside, return rFallback. Automatically does the correct inside/outside checks, e.g. static_cast< sal_uInt32 >(-0.25) *is* 0, not -1 and has to be outside */ - BitmapColor GetColorWithFallback( double fY, double fX, const BitmapColor& rFallback ) const; + BitmapColor GetColorWithFallback( double fY, double fX, const BitmapColor& rFallback ) const; private: - BitmapReadAccess() {} - BitmapReadAccess( const BitmapReadAccess& ) : BitmapInfoAccess() {} - BitmapReadAccess& operator=( const BitmapReadAccess& ) { return *this; } + BitmapReadAccess() + {} + + BitmapReadAccess(const BitmapReadAccess&) + : BitmapInfoAccess() + {} + + BitmapReadAccess& operator=(const BitmapReadAccess&) + { + return *this; + } protected: - Scanline* mpScanBuf; - FncGetPixel mFncGetPixel; - FncSetPixel mFncSetPixel; + Scanline* mpScanBuf; + FncGetPixel mFncGetPixel; + FncSetPixel mFncSetPixel; - SAL_DLLPRIVATE void ImplInitScanBuffer( Bitmap& rBitmap ); - SAL_DLLPRIVATE void ImplClearScanBuffer(); - SAL_DLLPRIVATE bool ImplSetAccessPointers( sal_uLong nFormat ); + SAL_DLLPRIVATE void ImplInitScanBuffer( Bitmap& rBitmap ); + SAL_DLLPRIVATE void ImplClearScanBuffer(); + SAL_DLLPRIVATE bool ImplSetAccessPointers( sal_uLong nFormat ); public: - SAL_DLLPRIVATE void ImplZeroInitUnusedBits(); - SAL_DLLPRIVATE BitmapBuffer* - ImplGetBitmapBuffer() const { return mpBuffer; } - - DECL_FORMAT( _1BIT_MSB_PAL ) - DECL_FORMAT( _1BIT_LSB_PAL ) - DECL_FORMAT( _4BIT_MSN_PAL ) - DECL_FORMAT( _4BIT_LSN_PAL ) - DECL_FORMAT( _8BIT_PAL ) - DECL_FORMAT( _8BIT_TC_MASK ) - DECL_FORMAT( _16BIT_TC_MSB_MASK ) - DECL_FORMAT( _16BIT_TC_LSB_MASK ) - DECL_FORMAT( _24BIT_TC_BGR ) - DECL_FORMAT( _24BIT_TC_RGB ) - DECL_FORMAT( _24BIT_TC_MASK ) - DECL_FORMAT( _32BIT_TC_ABGR ) - DECL_FORMAT( _32BIT_TC_ARGB ) - DECL_FORMAT( _32BIT_TC_BGRA ) - DECL_FORMAT( _32BIT_TC_RGBA ) - DECL_FORMAT( _32BIT_TC_MASK ) + SAL_DLLPRIVATE void ImplZeroInitUnusedBits(); + SAL_DLLPRIVATE BitmapBuffer* ImplGetBitmapBuffer() const + { + return mpBuffer; + } + + static BitmapColor GetPixelFor_1BIT_MSB_PAL(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_1BIT_LSB_PAL(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_4BIT_MSN_PAL(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_4BIT_LSN_PAL(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_8BIT_PAL(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_8BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_16BIT_TC_MSB_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_16BIT_TC_LSB_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_24BIT_TC_BGR(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_24BIT_TC_RGB(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_24BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_32BIT_TC_ABGR(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_32BIT_TC_ARGB(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_32BIT_TC_BGRA(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_32BIT_TC_RGBA(ConstScanline pScanline, long nX, const ColorMask& rMask); + static BitmapColor GetPixelFor_32BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask); + + static void SetPixelFor_1BIT_MSB_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_1BIT_LSB_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_4BIT_MSN_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_4BIT_LSN_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_8BIT_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_8BIT_TC_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_16BIT_TC_MSB_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_16BIT_TC_LSB_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_24BIT_TC_BGR(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_24BIT_TC_RGB(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_24BIT_TC_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_32BIT_TC_ABGR(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_32BIT_TC_ARGB(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_32BIT_TC_BGRA(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_32BIT_TC_RGBA(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); + static void SetPixelFor_32BIT_TC_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask); protected: - BitmapReadAccess( Bitmap& rBitmap, BitmapAccessMode nMode ); - + BitmapReadAccess(Bitmap& rBitmap, BitmapAccessMode nMode); }; // - BitmapWriteAccess - class VCL_DLLPUBLIC BitmapWriteAccess : public BitmapReadAccess { public: + BitmapWriteAccess(Bitmap& rBitmap); + virtual ~BitmapWriteAccess(); - BitmapWriteAccess( Bitmap& rBitmap ); - virtual ~BitmapWriteAccess(); - - void CopyScanline( long nY, const BitmapReadAccess& rReadAcc ); - void CopyScanline( long nY, ConstScanline aSrcScanline, - sal_uLong nSrcScanlineFormat, sal_uLong nSrcScanlineSize ); + void CopyScanline(long nY, const BitmapReadAccess& rReadAcc); + void CopyScanline(long nY, + ConstScanline aSrcScanline, + sal_uLong nSrcScanlineFormat, + sal_uLong nSrcScanlineSize); - void CopyBuffer( const BitmapReadAccess& rReadAcc ); + void CopyBuffer( const BitmapReadAccess& rReadAcc ); - inline void SetPalette( const BitmapPalette& rPalette ); - inline void SetPaletteEntryCount( sal_uInt16 nCount ); - inline void SetPaletteColor( sal_uInt16 nColor, const BitmapColor& rBitmapColor ); + inline void SetPalette(const BitmapPalette& rPalette); + inline void SetPaletteEntryCount(sal_uInt16 nCount); + inline void SetPaletteColor(sal_uInt16 nColor, const BitmapColor& rBitmapColor); - inline void SetPixel( long nY, long nX, const BitmapColor& rBitmapColor ); - inline void SetPixelIndex( long nY, long nX, sal_uInt8 cIndex ); + inline void SetPixel(long nY, long nX, const BitmapColor& rBitmapColor); + inline void SetPixelIndex(long nY, long nX, sal_uInt8 cIndex); - void SetLineColor( const Color& rColor ); + void SetLineColor(const Color& rColor); - void SetFillColor(); - void SetFillColor( const Color& rColor ); + void SetFillColor(); + void SetFillColor(const Color& rColor); - void Erase( const Color& rColor ); + void Erase(const Color& rColor); - void DrawLine( const Point& rStart, const Point& rEnd ); + void DrawLine(const Point& rStart, const Point& rEnd); - void FillRect( const Rectangle& rRect ); - void DrawRect( const Rectangle& rRect ); + void FillRect(const Rectangle& rRect); + void DrawRect(const Rectangle& rRect); private: - BitmapColor* mpLineColor; - BitmapColor* mpFillColor; + BitmapColor* mpLineColor; + BitmapColor* mpFillColor; + + BitmapWriteAccess() + {} + + BitmapWriteAccess(const BitmapWriteAccess&) + : BitmapReadAccess() + {} - BitmapWriteAccess() {} - BitmapWriteAccess( const BitmapWriteAccess& ) : BitmapReadAccess() {} - BitmapWriteAccess& operator=( const BitmapWriteAccess& ) { return *this; } + BitmapWriteAccess& operator=(const BitmapWriteAccess&) + { + return *this; + } }; // - Inlines - inline bool BitmapInfoAccess::operator!() const { - return( mpBuffer == NULL ); + return mpBuffer == NULL; } inline long BitmapInfoAccess::Width() const { - return( mpBuffer ? mpBuffer->mnWidth : 0L ); + return mpBuffer ? mpBuffer->mnWidth : 0L; } inline long BitmapInfoAccess::Height() const { - return( mpBuffer ? mpBuffer->mnHeight : 0L ); + return mpBuffer ? mpBuffer->mnHeight : 0L; } inline Point BitmapInfoAccess::TopLeft() const @@ -252,13 +260,14 @@ inline Point BitmapInfoAccess::TopLeft() const inline Point BitmapInfoAccess::BottomRight() const { - return Point( Width() - 1L, Height() - 1L ); + return Point(Width() - 1L, Height() - 1L); } inline bool BitmapInfoAccess::IsTopDown() const { assert(mpBuffer && "Access is not valid!"); - return mpBuffer && ( BMP_SCANLINE_ADJUSTMENT( mpBuffer->mnFormat ) == BMP_FORMAT_TOP_DOWN ); + + return mpBuffer && (BMP_SCANLINE_ADJUSTMENT(mpBuffer->mnFormat) == BMP_FORMAT_TOP_DOWN); } inline bool BitmapInfoAccess::IsBottomUp() const @@ -269,25 +278,28 @@ inline bool BitmapInfoAccess::IsBottomUp() const inline sal_uLong BitmapInfoAccess::GetScanlineFormat() const { assert(mpBuffer && "Access is not valid!"); - return( mpBuffer ? BMP_SCANLINE_FORMAT( mpBuffer->mnFormat ) : 0UL ); + + return mpBuffer ? BMP_SCANLINE_FORMAT(mpBuffer->mnFormat) : 0UL; } inline sal_uLong BitmapInfoAccess::GetScanlineSize() const { assert(mpBuffer && "Access is not valid!"); - return( mpBuffer ? mpBuffer->mnScanlineSize : 0UL ); + + return mpBuffer ? mpBuffer->mnScanlineSize : 0UL; } inline sal_uInt16 BitmapInfoAccess::GetBitCount() const { assert(mpBuffer && "Access is not valid!"); - return( mpBuffer ? mpBuffer->mnBitCount : 0 ); + + return mpBuffer ? mpBuffer->mnBitCount : 0; } -inline BitmapColor BitmapInfoAccess::GetBestMatchingColor( const BitmapColor& rBitmapColor ) +inline BitmapColor BitmapInfoAccess::GetBestMatchingColor(const BitmapColor& rBitmapColor) { - if( HasPalette() ) - return BitmapColor( (sal_uInt8) GetBestPaletteIndex( rBitmapColor ) ); + if (HasPalette()) + return BitmapColor((sal_uInt8) GetBestPaletteIndex(rBitmapColor)); else return rBitmapColor; } @@ -295,132 +307,147 @@ inline BitmapColor BitmapInfoAccess::GetBestMatchingColor( const BitmapColor& rB inline bool BitmapInfoAccess::HasPalette() const { assert(mpBuffer && "Access is not valid!"); - return( mpBuffer && !!mpBuffer->maPalette ); + + return mpBuffer && !!mpBuffer->maPalette; } inline const BitmapPalette& BitmapInfoAccess::GetPalette() const { assert(mpBuffer && "Access is not valid!"); + return mpBuffer->maPalette; } inline sal_uInt16 BitmapInfoAccess::GetPaletteEntryCount() const { assert(HasPalette() && "Bitmap has no palette!"); - return( HasPalette() ? mpBuffer->maPalette.GetEntryCount() : 0 ); + + return HasPalette() ? mpBuffer->maPalette.GetEntryCount() : 0; } 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 ]; + + return mpBuffer->maPalette[nColor]; } -inline const BitmapColor& BitmapInfoAccess::GetBestPaletteColor( const BitmapColor& rBitmapColor ) const +inline const BitmapColor& BitmapInfoAccess::GetBestPaletteColor(const BitmapColor& rBitmapColor) const { - return GetPaletteColor( GetBestPaletteIndex( rBitmapColor ) ); + return GetPaletteColor(GetBestPaletteIndex(rBitmapColor)); } inline bool BitmapInfoAccess::HasColorMask() const { assert(mpBuffer && "Access is not valid!"); - const sal_uLong nFormat = BMP_SCANLINE_FORMAT( mpBuffer->mnFormat ); - return( nFormat == BMP_FORMAT_8BIT_TC_MASK || - nFormat == BMP_FORMAT_16BIT_TC_MSB_MASK || - nFormat == BMP_FORMAT_16BIT_TC_LSB_MASK || - nFormat == BMP_FORMAT_24BIT_TC_MASK || - nFormat == BMP_FORMAT_32BIT_TC_MASK ); + const sal_uLong nFormat = BMP_SCANLINE_FORMAT(mpBuffer->mnFormat); + + return nFormat == BMP_FORMAT_8BIT_TC_MASK || + nFormat == BMP_FORMAT_16BIT_TC_MSB_MASK || + nFormat == BMP_FORMAT_16BIT_TC_LSB_MASK || + nFormat == BMP_FORMAT_24BIT_TC_MASK || + nFormat == BMP_FORMAT_32BIT_TC_MASK; } 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 ); + + return mpBuffer ? mpBuffer->mpBits : NULL; } -inline Scanline BitmapReadAccess::GetScanline( long nY ) const +inline Scanline BitmapReadAccess::GetScanline(long nY) const { assert(mpBuffer && mpScanBuf && "Access is not valid!"); assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!"); + return mpScanBuf[nY]; } -inline BitmapColor BitmapReadAccess::GetPixel( long nY, long nX ) const +inline BitmapColor BitmapReadAccess::GetPixel(long nY, long nX) const { assert(mpBuffer && mpScanBuf && "Access is not valid!"); assert(nX < mpBuffer->mnWidth && "x-coordinate out of range!"); assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!"); - return mFncGetPixel( mpScanBuf[ nY ], nX, maColorMask ); + + return mFncGetPixel(mpScanBuf[nY], nX, maColorMask ); } -inline sal_uInt8 BitmapReadAccess::GetPixelIndex( long nY, long nX ) const +inline sal_uInt8 BitmapReadAccess::GetPixelIndex(long nY, long nX) const { - return GetPixel( nY, nX ).GetBlueOrIndex(); + return GetPixel(nY, nX).GetBlueOrIndex(); } -inline BitmapColor BitmapReadAccess::GetPixelFromData( const sal_uInt8* pData, long nX ) const +inline BitmapColor BitmapReadAccess::GetPixelFromData(const sal_uInt8* pData, long nX) const { assert(pData && "Access is not valid!"); + return mFncGetPixel( pData, nX, maColorMask ); } -inline void BitmapReadAccess::SetPixelOnData( sal_uInt8* pData, long nX, const BitmapColor& rBitmapColor ) +inline void BitmapReadAccess::SetPixelOnData(sal_uInt8* pData, long nX, const BitmapColor& rBitmapColor) { assert(pData && "Access is not valid!"); - mFncSetPixel( pData, nX, rBitmapColor, maColorMask ); + + mFncSetPixel(pData, nX, rBitmapColor, maColorMask); } -inline BitmapColor BitmapReadAccess::GetColor( long nY, long nX ) const +inline BitmapColor BitmapReadAccess::GetColor(long nY, long nX) const { - if( HasPalette() ) - return mpBuffer->maPalette[ GetPixelIndex( nY, nX ) ]; + if (HasPalette()) + return mpBuffer->maPalette[GetPixelIndex(nY, nX)]; else - return GetPixel( nY, nX ); + return GetPixel(nY, nX); } -inline sal_uInt8 BitmapReadAccess::GetLuminance( long nY, long nX ) const +inline sal_uInt8 BitmapReadAccess::GetLuminance(long nY, long nX) const { - return GetColor( nY, nX ).GetLuminance(); + return GetColor(nY, nX).GetLuminance(); } -inline void BitmapWriteAccess::SetPalette( const BitmapPalette& rPalette ) +inline void BitmapWriteAccess::SetPalette(const BitmapPalette& rPalette) { assert(mpBuffer && "Access is not valid!"); + mpBuffer->maPalette = rPalette; } -inline void BitmapWriteAccess::SetPaletteEntryCount( sal_uInt16 nCount ) +inline void BitmapWriteAccess::SetPaletteEntryCount(sal_uInt16 nCount) { assert(mpBuffer && "Access is not valid!"); - mpBuffer->maPalette.SetEntryCount( nCount ); + + mpBuffer->maPalette.SetEntryCount(nCount); } -inline void BitmapWriteAccess::SetPaletteColor( sal_uInt16 nColor, const BitmapColor& rBitmapColor ) +inline void BitmapWriteAccess::SetPaletteColor(sal_uInt16 nColor, const BitmapColor& rBitmapColor) { assert(mpBuffer && "Access is not valid!"); assert(HasPalette() && "Bitmap has no palette!"); - mpBuffer->maPalette[ nColor ] = rBitmapColor; + + mpBuffer->maPalette[nColor] = rBitmapColor; } -inline void BitmapWriteAccess::SetPixel( long nY, long nX, const BitmapColor& rBitmapColor ) +inline void BitmapWriteAccess::SetPixel(long nY, long nX, const BitmapColor& rBitmapColor) { assert(mpBuffer && "Access is not valid!"); assert(nX < mpBuffer->mnWidth && "x-coordinate out of range!"); assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!"); - mFncSetPixel( mpScanBuf[ nY ], nX, rBitmapColor, maColorMask ); + + mFncSetPixel(mpScanBuf[nY], nX, rBitmapColor, maColorMask); } -inline void BitmapWriteAccess::SetPixelIndex( long nY, long nX, sal_uInt8 cIndex ) +inline void BitmapWriteAccess::SetPixelIndex(long nY, long nX, sal_uInt8 cIndex) { - SetPixel( nY, nX, BitmapColor( cIndex )); + SetPixel(nY, nX, BitmapColor(cIndex)); } #endif // INCLUDED_VCL_BMPACC_HXX diff --git a/vcl/source/gdi/bmpacc.cxx b/vcl/source/gdi/bmpacc.cxx index 33e5038a529f..cdda5dcb87be 100644 --- a/vcl/source/gdi/bmpacc.cxx +++ b/vcl/source/gdi/bmpacc.cxx @@ -171,22 +171,102 @@ bool BitmapReadAccess::ImplSetAccessPointers( sal_uLong nFormat ) switch( nFormat ) { - CASE_FORMAT( _1BIT_MSB_PAL ) - CASE_FORMAT( _1BIT_LSB_PAL ) - CASE_FORMAT( _4BIT_MSN_PAL ) - CASE_FORMAT( _4BIT_LSN_PAL ) - CASE_FORMAT( _8BIT_PAL ) - CASE_FORMAT( _8BIT_TC_MASK ) - CASE_FORMAT( _16BIT_TC_MSB_MASK ) - CASE_FORMAT( _16BIT_TC_LSB_MASK ) - CASE_FORMAT( _24BIT_TC_BGR ) - CASE_FORMAT( _24BIT_TC_RGB ) - CASE_FORMAT( _24BIT_TC_MASK ) - CASE_FORMAT( _32BIT_TC_ABGR ) - CASE_FORMAT( _32BIT_TC_ARGB ) - CASE_FORMAT( _32BIT_TC_BGRA ) - CASE_FORMAT( _32BIT_TC_RGBA ) - CASE_FORMAT( _32BIT_TC_MASK ) + case BMP_FORMAT_1BIT_MSB_PAL: + { + mFncGetPixel = GetPixelFor_1BIT_MSB_PAL; + mFncSetPixel = SetPixelFor_1BIT_MSB_PAL; + } + break; + case BMP_FORMAT_1BIT_LSB_PAL: + { + mFncGetPixel = GetPixelFor_1BIT_LSB_PAL; + mFncSetPixel = SetPixelFor_1BIT_LSB_PAL; + } + break; + case BMP_FORMAT_4BIT_MSN_PAL: + { + mFncGetPixel = GetPixelFor_4BIT_MSN_PAL; + mFncSetPixel = SetPixelFor_4BIT_MSN_PAL; + } + break; + case BMP_FORMAT_4BIT_LSN_PAL: + { + mFncGetPixel = GetPixelFor_4BIT_LSN_PAL; + mFncSetPixel = SetPixelFor_4BIT_LSN_PAL; + } + break; + case BMP_FORMAT_8BIT_PAL: + { + mFncGetPixel = GetPixelFor_8BIT_PAL; + mFncSetPixel = SetPixelFor_8BIT_PAL; + } + break; + case BMP_FORMAT_8BIT_TC_MASK: + { + mFncGetPixel = GetPixelFor_8BIT_TC_MASK; + mFncSetPixel = SetPixelFor_8BIT_TC_MASK; + } + break; + case BMP_FORMAT_16BIT_TC_MSB_MASK: + { + mFncGetPixel = GetPixelFor_16BIT_TC_MSB_MASK; + mFncSetPixel = SetPixelFor_16BIT_TC_MSB_MASK; + } + break; + case BMP_FORMAT_16BIT_TC_LSB_MASK: + { + mFncGetPixel = GetPixelFor_16BIT_TC_LSB_MASK; + mFncSetPixel = SetPixelFor_16BIT_TC_LSB_MASK; + } + break; + case BMP_FORMAT_24BIT_TC_BGR: + { + mFncGetPixel = GetPixelFor_24BIT_TC_BGR; + mFncSetPixel = SetPixelFor_24BIT_TC_BGR; + } + break; + case BMP_FORMAT_24BIT_TC_RGB: + { + mFncGetPixel = GetPixelFor_24BIT_TC_RGB; + mFncSetPixel = SetPixelFor_24BIT_TC_RGB; + } + break; + case BMP_FORMAT_24BIT_TC_MASK: + { + mFncGetPixel = GetPixelFor_24BIT_TC_MASK; + mFncSetPixel = SetPixelFor_24BIT_TC_MASK; + } + break; + case BMP_FORMAT_32BIT_TC_ABGR: + { + mFncGetPixel = GetPixelFor_32BIT_TC_ABGR; + mFncSetPixel = SetPixelFor_32BIT_TC_ABGR; + } + break; + case BMP_FORMAT_32BIT_TC_ARGB: + { + mFncGetPixel = GetPixelFor_32BIT_TC_ARGB; + mFncSetPixel = SetPixelFor_32BIT_TC_ARGB; + } + break; + case BMP_FORMAT_32BIT_TC_BGRA: + { + mFncGetPixel = GetPixelFor_32BIT_TC_BGRA; + mFncSetPixel = SetPixelFor_32BIT_TC_BGRA; + } + break; + case BMP_FORMAT_32BIT_TC_RGBA: + { + mFncGetPixel = GetPixelFor_32BIT_TC_RGBA; + mFncSetPixel = SetPixelFor_32BIT_TC_RGBA; + } + break; + case BMP_FORMAT_32BIT_TC_MASK: + { + mFncGetPixel = GetPixelFor_32BIT_TC_MASK; + mFncSetPixel = SetPixelFor_32BIT_TC_MASK; + } + break; default: bRet = false; diff --git a/vcl/source/gdi/bmpacc2.cxx b/vcl/source/gdi/bmpacc2.cxx index 12b0c1d1d617..d664c4b769fd 100644 --- a/vcl/source/gdi/bmpacc2.cxx +++ b/vcl/source/gdi/bmpacc2.cxx @@ -20,12 +20,12 @@ #include <vcl/salbtype.hxx> #include <vcl/bmpacc.hxx> -IMPL_FORMAT_GETPIXEL_NOMASK( _1BIT_MSB_PAL ) +BitmapColor BitmapReadAccess::GetPixelFor_1BIT_MSB_PAL(ConstScanline pScanline, long nX, const ColorMask&) { return BitmapColor( pScanline[ nX >> 3 ] & ( 1 << ( 7 - ( nX & 7 ) ) ) ? 1 : 0 ); } -IMPL_FORMAT_SETPIXEL_NOMASK( _1BIT_MSB_PAL ) +void BitmapReadAccess::SetPixelFor_1BIT_MSB_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { sal_uInt8& rByte = pScanline[ nX >> 3 ]; @@ -33,12 +33,12 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _1BIT_MSB_PAL ) ( rByte &= ~( 1 << ( 7 - ( nX & 7 ) ) ) ); } -IMPL_FORMAT_GETPIXEL_NOMASK( _1BIT_LSB_PAL ) +BitmapColor BitmapReadAccess::GetPixelFor_1BIT_LSB_PAL(ConstScanline pScanline, long nX, const ColorMask&) { return BitmapColor( pScanline[ nX >> 3 ] & ( 1 << ( nX & 7 ) ) ? 1 : 0 ); } -IMPL_FORMAT_SETPIXEL_NOMASK( _1BIT_LSB_PAL ) +void BitmapReadAccess::SetPixelFor_1BIT_LSB_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { sal_uInt8& rByte = pScanline[ nX >> 3 ]; @@ -46,12 +46,12 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _1BIT_LSB_PAL ) ( rByte &= ~( 1 << ( nX & 7 ) ) ); } -IMPL_FORMAT_GETPIXEL_NOMASK( _4BIT_MSN_PAL ) +BitmapColor BitmapReadAccess::GetPixelFor_4BIT_MSN_PAL(ConstScanline pScanline, long nX, const ColorMask&) { return BitmapColor( ( pScanline[ nX >> 1 ] >> ( nX & 1 ? 0 : 4 ) ) & 0x0f ); } -IMPL_FORMAT_SETPIXEL_NOMASK( _4BIT_MSN_PAL ) +void BitmapReadAccess::SetPixelFor_4BIT_MSN_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { sal_uInt8& rByte = pScanline[ nX >> 1 ]; @@ -59,12 +59,12 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _4BIT_MSN_PAL ) ( rByte &= 0x0f, rByte |= ( rBitmapColor.GetIndex() << 4 ) ); } -IMPL_FORMAT_GETPIXEL_NOMASK( _4BIT_LSN_PAL ) +BitmapColor BitmapReadAccess::GetPixelFor_4BIT_LSN_PAL(ConstScanline pScanline, long nX, const ColorMask&) { return BitmapColor( ( pScanline[ nX >> 1 ] >> ( nX & 1 ? 4 : 0 ) ) & 0x0f ); } -IMPL_FORMAT_SETPIXEL_NOMASK( _4BIT_LSN_PAL ) +void BitmapReadAccess::SetPixelFor_4BIT_LSN_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { sal_uInt8& rByte = pScanline[ nX >> 1 ]; @@ -72,53 +72,54 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _4BIT_LSN_PAL ) ( rByte &= 0xf0, rByte |= ( rBitmapColor.GetIndex() & 0x0f ) ); } -IMPL_FORMAT_GETPIXEL_NOMASK( _8BIT_PAL ) +BitmapColor BitmapReadAccess::GetPixelFor_8BIT_PAL(ConstScanline pScanline, long nX, const ColorMask&) { return BitmapColor( pScanline[ nX ] ); } -IMPL_FORMAT_SETPIXEL_NOMASK( _8BIT_PAL ) +void BitmapReadAccess::SetPixelFor_8BIT_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { pScanline[ nX ] = rBitmapColor.GetIndex(); } -IMPL_FORMAT_GETPIXEL( _8BIT_TC_MASK ) +BitmapColor BitmapReadAccess::GetPixelFor_8BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask) { BitmapColor aColor; rMask.GetColorFor8Bit( aColor, pScanline + nX ); return aColor; } -IMPL_FORMAT_SETPIXEL( _8BIT_TC_MASK ) +void BitmapReadAccess::SetPixelFor_8BIT_TC_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask) { rMask.SetColorFor8Bit( rBitmapColor, pScanline + nX ); } -IMPL_FORMAT_GETPIXEL( _16BIT_TC_MSB_MASK ) + +BitmapColor BitmapReadAccess::GetPixelFor_16BIT_TC_MSB_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask) { BitmapColor aColor; rMask.GetColorFor16BitMSB( aColor, pScanline + ( nX << 1UL ) ); return aColor; } -IMPL_FORMAT_SETPIXEL( _16BIT_TC_MSB_MASK ) +void BitmapReadAccess::SetPixelFor_16BIT_TC_MSB_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask) { rMask.SetColorFor16BitMSB( rBitmapColor, pScanline + ( nX << 1UL ) ); } -IMPL_FORMAT_GETPIXEL( _16BIT_TC_LSB_MASK ) +BitmapColor BitmapReadAccess::GetPixelFor_16BIT_TC_LSB_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask) { BitmapColor aColor; rMask.GetColorFor16BitLSB( aColor, pScanline + ( nX << 1UL ) ); return aColor; } -IMPL_FORMAT_SETPIXEL( _16BIT_TC_LSB_MASK ) +void BitmapReadAccess::SetPixelFor_16BIT_TC_LSB_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask) { rMask.SetColorFor16BitLSB( rBitmapColor, pScanline + ( nX << 1UL ) ); } -IMPL_FORMAT_GETPIXEL_NOMASK( _24BIT_TC_BGR ) +BitmapColor BitmapReadAccess::GetPixelFor_24BIT_TC_BGR(ConstScanline pScanline, long nX, const ColorMask&) { BitmapColor aBitmapColor; @@ -129,14 +130,14 @@ IMPL_FORMAT_GETPIXEL_NOMASK( _24BIT_TC_BGR ) return aBitmapColor; } -IMPL_FORMAT_SETPIXEL_NOMASK( _24BIT_TC_BGR ) +void BitmapReadAccess::SetPixelFor_24BIT_TC_BGR(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { *( pScanline = pScanline + nX * 3 )++ = rBitmapColor.GetBlue(); *pScanline++ = rBitmapColor.GetGreen(); *pScanline = rBitmapColor.GetRed(); } -IMPL_FORMAT_GETPIXEL_NOMASK( _24BIT_TC_RGB ) +BitmapColor BitmapReadAccess::GetPixelFor_24BIT_TC_RGB(ConstScanline pScanline, long nX, const ColorMask&) { BitmapColor aBitmapColor; @@ -147,26 +148,26 @@ IMPL_FORMAT_GETPIXEL_NOMASK( _24BIT_TC_RGB ) return aBitmapColor; } -IMPL_FORMAT_SETPIXEL_NOMASK( _24BIT_TC_RGB ) +void BitmapReadAccess::SetPixelFor_24BIT_TC_RGB(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { *( pScanline = pScanline + nX * 3 )++ = rBitmapColor.GetRed(); *pScanline++ = rBitmapColor.GetGreen(); *pScanline = rBitmapColor.GetBlue(); } -IMPL_FORMAT_GETPIXEL( _24BIT_TC_MASK ) +BitmapColor BitmapReadAccess::GetPixelFor_24BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask) { BitmapColor aColor; rMask.GetColorFor24Bit( aColor, pScanline + nX * 3L ); return aColor; } -IMPL_FORMAT_SETPIXEL( _24BIT_TC_MASK ) +void BitmapReadAccess::SetPixelFor_24BIT_TC_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask) { rMask.SetColorFor24Bit( rBitmapColor, pScanline + nX * 3L ); } -IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_ABGR ) +BitmapColor BitmapReadAccess::GetPixelFor_32BIT_TC_ABGR(ConstScanline pScanline, long nX, const ColorMask&) { BitmapColor aBitmapColor; @@ -177,7 +178,7 @@ IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_ABGR ) return aBitmapColor; } -IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_ABGR ) +void BitmapReadAccess::SetPixelFor_32BIT_TC_ABGR(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { *( pScanline = pScanline + ( nX << 2 ) )++ = 0xFF; *pScanline++ = rBitmapColor.GetBlue(); @@ -185,7 +186,7 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_ABGR ) *pScanline = rBitmapColor.GetRed(); } -IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_ARGB ) +BitmapColor BitmapReadAccess::GetPixelFor_32BIT_TC_ARGB(ConstScanline pScanline, long nX, const ColorMask&) { BitmapColor aBitmapColor; @@ -196,7 +197,7 @@ IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_ARGB ) return aBitmapColor; } -IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_ARGB ) +void BitmapReadAccess::SetPixelFor_32BIT_TC_ARGB(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { *( pScanline = pScanline + ( nX << 2 ) )++ = 0xFF; *pScanline++ = rBitmapColor.GetRed(); @@ -204,7 +205,7 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_ARGB ) *pScanline = rBitmapColor.GetBlue(); } -IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_BGRA ) +BitmapColor BitmapReadAccess::GetPixelFor_32BIT_TC_BGRA(ConstScanline pScanline, long nX, const ColorMask&) { BitmapColor aBitmapColor; @@ -215,7 +216,7 @@ IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_BGRA ) return aBitmapColor; } -IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_BGRA ) +void BitmapReadAccess::SetPixelFor_32BIT_TC_BGRA(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { *( pScanline = pScanline + ( nX << 2 ) )++ = rBitmapColor.GetBlue(); *pScanline++ = rBitmapColor.GetGreen(); @@ -223,7 +224,7 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_BGRA ) *pScanline = 0xFF; } -IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_RGBA ) +BitmapColor BitmapReadAccess::GetPixelFor_32BIT_TC_RGBA(ConstScanline pScanline, long nX, const ColorMask&) { BitmapColor aBitmapColor; @@ -234,7 +235,7 @@ IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_RGBA ) return aBitmapColor; } -IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_RGBA ) +void BitmapReadAccess::SetPixelFor_32BIT_TC_RGBA(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&) { *( pScanline = pScanline + ( nX << 2 ) )++ = rBitmapColor.GetRed(); *pScanline++ = rBitmapColor.GetGreen(); @@ -242,14 +243,14 @@ IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_RGBA ) *pScanline = 0xFF; } -IMPL_FORMAT_GETPIXEL( _32BIT_TC_MASK ) +BitmapColor BitmapReadAccess::GetPixelFor_32BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask) { BitmapColor aColor; rMask.GetColorFor32Bit( aColor, pScanline + ( nX << 2UL ) ); return aColor; } -IMPL_FORMAT_SETPIXEL( _32BIT_TC_MASK ) +void BitmapReadAccess::SetPixelFor_32BIT_TC_MASK(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask) { rMask.SetColorFor32Bit( rBitmapColor, pScanline + ( nX << 2UL ) ); } |