summaryrefslogtreecommitdiff
path: root/vcl/source/gdi/bmpacc.cxx
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2020-10-09 15:20:43 +0200
committerLuboš Luňák <l.lunak@collabora.com>2020-10-12 15:09:27 +0200
commit6036b2486cdc5ba8eac8636b2e087658e3550586 (patch)
tree0801f1f507629c8319315662ccab33e7fc5f47b1 /vcl/source/gdi/bmpacc.cxx
parenta879daa45f40fd84373a92242e098eaf6a493508 (diff)
implement fast bitmap variant for CopyScanline()
JPEG reads RGB, but e.g. with Skia the default bitmap format is BGRA. Change-Id: Iad1a9e99f286b03db0fa683c14d70b8ad48d3d9d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104120 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'vcl/source/gdi/bmpacc.cxx')
-rw-r--r--vcl/source/gdi/bmpacc.cxx20
1 files changed, 12 insertions, 8 deletions
diff --git a/vcl/source/gdi/bmpacc.cxx b/vcl/source/gdi/bmpacc.cxx
index a406951cd7f7..3994f9c1889a 100644
--- a/vcl/source/gdi/bmpacc.cxx
+++ b/vcl/source/gdi/bmpacc.cxx
@@ -24,6 +24,7 @@
#include <salbmp.hxx>
#include <svdata.hxx>
#include <salinst.hxx>
+#include <bmpfast.hxx>
#include <string.h>
#include <sal/log.hxx>
@@ -344,11 +345,14 @@ void BitmapWriteAccess::CopyScanline( long nY, const BitmapReadAccess& rReadAcc
}
else
{
- // TODO: use fastbmp infrastructure
- Scanline pScanline = GetScanline( nY );
- Scanline pScanlineRead = rReadAcc.GetScanline(nY);
- for( long nX = 0, nWidth = std::min( mpBuffer->mnWidth, rReadAcc.Width() ); nX < nWidth; nX++ )
- SetPixelOnData( pScanline, nX, rReadAcc.GetPixelFromData( pScanlineRead, nX ) );
+ long nWidth = std::min( mpBuffer->mnWidth, rReadAcc.Width() );
+ if(!ImplFastCopyScanline( nY, *ImplGetBitmapBuffer(), *rReadAcc.ImplGetBitmapBuffer()))
+ {
+ Scanline pScanline = GetScanline( nY );
+ Scanline pScanlineRead = rReadAcc.GetScanline(nY);
+ for( long nX = 0; nX < nWidth; nX++ )
+ SetPixelOnData( pScanline, nX, rReadAcc.GetPixelFromData( pScanlineRead, nX ) );
+ }
}
}
@@ -371,13 +375,13 @@ void BitmapWriteAccess::CopyScanline( long nY, ConstScanline aSrcScanline,
memcpy(GetScanline(nY), aSrcScanline, nCount);
else
{
+ if(ImplFastCopyScanline( nY, *ImplGetBitmapBuffer(), aSrcScanline, nSrcScanlineFormat, nSrcScanlineSize ))
+ return;
+
DBG_ASSERT( nFormat != ScanlineFormat::N8BitTcMask &&
nFormat != ScanlineFormat::N32BitTcMask,
"No support for pixel formats with color masks yet!" );
-
- // TODO: use fastbmp infrastructure
FncGetPixel pFncGetPixel;
-
switch( nFormat )
{
case ScanlineFormat::N1BitMsbPal: pFncGetPixel = GetPixelForN1BitMsbPal; break;