LibreOffice Module vcl (master)  1
bmpacc.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
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/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <vcl/bitmap.hxx>
21 #include <vcl/bitmapaccess.hxx>
22 
23 #include <bitmapwriteaccess.hxx>
24 #include <salbmp.hxx>
25 #include <svdata.hxx>
26 #include <salinst.hxx>
27 
28 #include <string.h>
29 #include <sal/log.hxx>
30 #include <tools/debug.hxx>
31 
33  mpBuffer ( nullptr ),
34  mnAccessMode ( nMode )
35 {
36  std::shared_ptr<SalBitmap> xImpBmp = rBitmap.ImplGetSalBitmap();
37 
38  assert( xImpBmp && "Forbidden Access to empty bitmap!" );
39 
40  if( !xImpBmp )
41  return;
42 
44  {
45  xImpBmp->DropScaledCache();
46 
47  if (xImpBmp.use_count() > 2)
48  {
49  xImpBmp.reset();
50  rBitmap.ImplMakeUnique();
51  xImpBmp = rBitmap.ImplGetSalBitmap();
52  }
53  }
54 
55  mpBuffer = xImpBmp->AcquireBuffer( mnAccessMode );
56 
57  if( !mpBuffer )
58  {
59  std::shared_ptr<SalBitmap> xNewImpBmp(ImplGetSVData()->mpDefInst->CreateSalBitmap());
60  if (xNewImpBmp->Create(*xImpBmp, rBitmap.GetBitCount()))
61  {
62  xImpBmp = xNewImpBmp;
63  rBitmap.ImplSetSalBitmap( xImpBmp );
64  mpBuffer = xImpBmp->AcquireBuffer( mnAccessMode );
65  }
66  }
67 
68  maBitmap = rBitmap;
69 }
70 
72 {
73  std::shared_ptr<SalBitmap> xImpBmp = maBitmap.ImplGetSalBitmap();
74 
75  if (mpBuffer && xImpBmp)
76  {
77  xImpBmp->ReleaseBuffer( mpBuffer, mnAccessMode );
78  }
79 }
80 
81 sal_uInt16 BitmapInfoAccess::GetBestPaletteIndex( const BitmapColor& rBitmapColor ) const
82 {
83  return( HasPalette() ? mpBuffer->maPalette.GetBestIndex( rBitmapColor ) : 0 );
84 }
85 
87  BitmapInfoAccess( rBitmap, nMode ),
88  mFncGetPixel ( nullptr ),
89  mFncSetPixel ( nullptr )
90 {
91  if (!mpBuffer)
92  return;
93 
94  const std::shared_ptr<SalBitmap>& xImpBmp = rBitmap.ImplGetSalBitmap();
95  if (!xImpBmp)
96  return;
97 
99 
101 
102  if (!bOk)
103  {
104  xImpBmp->ReleaseBuffer( mpBuffer, mnAccessMode );
105  mpBuffer = nullptr;
106  }
107 }
108 
110 {
111 }
112 
113 namespace
114 {
115  bool Bitmap32IsPreMultipled()
116  {
117  auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
118  return pBackendCapabilities->mbSupportsBitmap32;
119  }
120 }
121 
123 {
124  bool bRet = true;
125 
126  switch( nFormat )
127  {
129  {
132  }
133  break;
135  {
138  }
139  break;
141  {
144  }
145  break;
147  {
150  }
151  break;
153  {
156  }
157  break;
159  {
162  }
163  break;
165  {
168  }
169  break;
171  {
174  }
175  break;
177  {
180  }
181  break;
183  {
186  }
187  break;
189  {
190  if (Bitmap32IsPreMultipled())
191  {
194  }
195  else
196  {
199  }
200  }
201  break;
203  {
204  if (Bitmap32IsPreMultipled())
205  {
208  }
209  else
210  {
213  }
214  }
215  break;
217  {
218  if (Bitmap32IsPreMultipled())
219  {
222  }
223  else
224  {
227  }
228  }
229  break;
231  {
232  if (Bitmap32IsPreMultipled())
233  {
236  }
237  else
238  {
241  }
242  }
243  break;
245  {
248  }
249  break;
250 
251  default:
252  bRet = false;
253  break;
254  }
255 
256  return bRet;
257 }
258 
259 BitmapColor BitmapReadAccess::GetInterpolatedColorWithFallback( double fY, double fX, const BitmapColor& rFallback ) const
260 {
261  // ask directly doubles >= 0.0 here to avoid rounded values of 0 at small negative
262  // double values, e.g. static_cast< sal_Int32 >(-0.25) is 0, not -1, but *has* to be outside (!)
263  if(mpBuffer && fX >= 0.0 && fY >= 0.0)
264  {
265  const sal_Int64 nX(static_cast<sal_Int64>(fX));
266  const sal_Int64 nY(static_cast<sal_Int64>(fY));
267 
268  if(nX < mpBuffer->mnWidth && nY < mpBuffer->mnHeight)
269  {
270  // get base-return value from inside pixel
271  BitmapColor aRetval(GetColor(nY, nX));
272 
273  // calculate deltas and indices for neighbour accesses
274  sal_Int16 nDeltaX((fX - (nX + 0.5)) * 255.0); // [-255 .. 255]
275  sal_Int16 nDeltaY((fY - (nY + 0.5)) * 255.0); // [-255 .. 255]
276  sal_Int16 nIndX(0);
277  sal_Int16 nIndY(0);
278 
279  if(nDeltaX > 0)
280  {
281  nIndX = nX + 1;
282  }
283  else
284  {
285  nIndX = nX - 1;
286  nDeltaX = -nDeltaX;
287  }
288 
289  if(nDeltaY > 0)
290  {
291  nIndY = nY + 1;
292  }
293  else
294  {
295  nIndY = nY - 1;
296  nDeltaY = -nDeltaY;
297  }
298 
299  // get right/left neighbour
300  BitmapColor aXCol(rFallback);
301 
302  if(nDeltaX && nIndX >= 0 && nIndX < mpBuffer->mnWidth)
303  {
304  aXCol = GetColor(nY, nIndX);
305  }
306 
307  // get top/bottom neighbour
308  BitmapColor aYCol(rFallback);
309 
310  if(nDeltaY && nIndY >= 0 && nIndY < mpBuffer->mnHeight)
311  {
312  aYCol = GetColor(nIndY, nX);
313  }
314 
315  // get one of four edge neighbours
316  BitmapColor aXYCol(rFallback);
317 
318  if(nDeltaX && nDeltaY && nIndX >=0 && nIndY >= 0 && nIndX < mpBuffer->mnWidth && nIndY < mpBuffer->mnHeight)
319  {
320  aXYCol = GetColor(nIndY, nIndX);
321  }
322 
323  // merge return value with right/left neighbour
324  if(aXCol != aRetval)
325  {
326  aRetval.Merge(aXCol, 255 - nDeltaX);
327  }
328 
329  // merge top/bottom neighbour with edge
330  if(aYCol != aXYCol)
331  {
332  aYCol.Merge(aXYCol, 255 - nDeltaX);
333  }
334 
335  // merge return value with already merged top/bottom neighbour
336  if(aRetval != aYCol)
337  {
338  aRetval.Merge(aYCol, 255 - nDeltaY);
339  }
340 
341  return aRetval;
342  }
343  }
344 
345  return rFallback;
346 }
347 
348 BitmapColor BitmapReadAccess::GetColorWithFallback( double fY, double fX, const BitmapColor& rFallback ) const
349 {
350  // ask directly doubles >= 0.0 here to avoid rounded values of 0 at small negative
351  // double values, e.g. static_cast< sal_Int32 >(-0.25) is 0, not -1, but *has* to be outside (!)
352  if(mpBuffer && fX >= 0.0 && fY >= 0.0)
353  {
354  const sal_Int32 nX(static_cast< sal_Int32 >(fX));
355  const sal_Int32 nY(static_cast< sal_Int32 >(fY));
356 
357  if(nX < mpBuffer->mnWidth && nY < mpBuffer->mnHeight)
358  {
359  return GetColor(nY, nX);
360  }
361  }
362 
363  return rFallback;
364 }
365 
368 {
369 }
370 
372 {
373 }
374 
375 void BitmapWriteAccess::CopyScanline( long nY, const BitmapReadAccess& rReadAcc )
376 {
377  assert(nY >= 0 && nY < mpBuffer->mnHeight && "y-coordinate in destination out of range!");
378  SAL_WARN_IF( nY >= rReadAcc.Height(), "vcl", "y-coordinate in source out of range!" );
379  SAL_WARN_IF( ( !HasPalette() || !rReadAcc.HasPalette() ) && ( HasPalette() || rReadAcc.HasPalette() ), "vcl", "No copying possible between palette bitmap and TC bitmap!" );
380 
381  if( ( GetScanlineFormat() == rReadAcc.GetScanlineFormat() ) &&
382  ( GetScanlineSize() >= rReadAcc.GetScanlineSize() ) )
383  {
384  memcpy(GetScanline(nY), rReadAcc.GetScanline(nY), rReadAcc.GetScanlineSize());
385  }
386  else
387  {
388  // TODO: use fastbmp infrastructure
389  Scanline pScanline = GetScanline( nY );
390  Scanline pScanlineRead = rReadAcc.GetScanline(nY);
391  for( long nX = 0, nWidth = std::min( mpBuffer->mnWidth, rReadAcc.Width() ); nX < nWidth; nX++ )
392  SetPixelOnData( pScanline, nX, rReadAcc.GetPixelFromData( pScanlineRead, nX ) );
393  }
394 }
395 
396 void BitmapWriteAccess::CopyScanline( long nY, ConstScanline aSrcScanline,
397  ScanlineFormat nSrcScanlineFormat, sal_uInt32 nSrcScanlineSize )
398 {
399  const ScanlineFormat nFormat = RemoveScanline( nSrcScanlineFormat );
400 
401  assert(nY >= 0 && nY < mpBuffer->mnHeight && "y-coordinate in destination out of range!");
402  DBG_ASSERT( ( HasPalette() && nFormat <= ScanlineFormat::N8BitPal ) ||
403  ( !HasPalette() && nFormat > ScanlineFormat::N8BitPal ),
404  "No copying possible between palette and non palette scanlines!" );
405 
406  const sal_uLong nCount = std::min( GetScanlineSize(), nSrcScanlineSize );
407 
408  if( nCount )
409  {
410  if( GetScanlineFormat() == RemoveScanline( nSrcScanlineFormat ) )
411  memcpy(GetScanline(nY), aSrcScanline, nCount);
412  else
413  {
416  nFormat != ScanlineFormat::N32BitTcMask,
417  "No support for pixel formats with color masks yet!" );
418 
419  // TODO: use fastbmp infrastructure
420  FncGetPixel pFncGetPixel;
421 
422  switch( nFormat )
423  {
424  case ScanlineFormat::N1BitMsbPal: pFncGetPixel = GetPixelForN1BitMsbPal; break;
425  case ScanlineFormat::N1BitLsbPal: pFncGetPixel = GetPixelForN1BitLsbPal; break;
426  case ScanlineFormat::N4BitMsnPal: pFncGetPixel = GetPixelForN4BitMsnPal; break;
427  case ScanlineFormat::N4BitLsnPal: pFncGetPixel = GetPixelForN4BitLsnPal; break;
428  case ScanlineFormat::N8BitPal: pFncGetPixel = GetPixelForN8BitPal; break;
429  case ScanlineFormat::N8BitTcMask: pFncGetPixel = GetPixelForN8BitTcMask; break;
432  case ScanlineFormat::N24BitTcBgr: pFncGetPixel = GetPixelForN24BitTcBgr; break;
433  case ScanlineFormat::N24BitTcRgb: pFncGetPixel = GetPixelForN24BitTcRgb; break;
435  if (Bitmap32IsPreMultipled())
436  pFncGetPixel = GetPixelForN32BitTcAbgr;
437  else
438  pFncGetPixel = GetPixelForN32BitTcXbgr;
439  break;
441  if (Bitmap32IsPreMultipled())
442  pFncGetPixel = GetPixelForN32BitTcArgb;
443  else
444  pFncGetPixel = GetPixelForN32BitTcXrgb;
445  break;
447  if (Bitmap32IsPreMultipled())
448  pFncGetPixel = GetPixelForN32BitTcBgra;
449  else
450  pFncGetPixel = GetPixelForN32BitTcBgrx;
451  break;
453  if (Bitmap32IsPreMultipled())
454  pFncGetPixel = GetPixelForN32BitTcRgba;
455  else
456  pFncGetPixel = GetPixelForN32BitTcRgbx;
457  break;
458  case ScanlineFormat::N32BitTcMask: pFncGetPixel = GetPixelForN32BitTcMask; break;
459 
460  default:
461  pFncGetPixel = nullptr;
462  break;
463  }
464 
465  if( pFncGetPixel )
466  {
467  const ColorMask aDummyMask;
468  Scanline pScanline = GetScanline(nY);
469  for (long nX = 0, nWidth = mpBuffer->mnWidth; nX < nWidth; ++nX)
470  SetPixelOnData(pScanline, nX, pFncGetPixel(aSrcScanline, nX, aDummyMask));
471  }
472  }
473  }
474 }
475 
477 {
478  SAL_WARN_IF( ( !HasPalette() || !rReadAcc.HasPalette() ) && ( HasPalette() || rReadAcc.HasPalette() ), "vcl", "No copying possible between palette bitmap and TC bitmap!" );
479 
480  if( ( GetScanlineFormat() == rReadAcc.GetScanlineFormat() ) &&
481  ( GetScanlineSize() == rReadAcc.GetScanlineSize() ) )
482  {
483  const long nHeight = std::min( mpBuffer->mnHeight, rReadAcc.Height() );
484  const sal_uLong nCount = nHeight * mpBuffer->mnScanlineSize;
485 
486  memcpy( mpBuffer->mpBits, rReadAcc.GetBuffer(), nCount );
487  }
488  else
489  for( long nY = 0, nHeight = std::min( mpBuffer->mnHeight, rReadAcc.Height() ); nY < nHeight; nY++ )
490  CopyScanline( nY, rReadAcc );
491 }
492 
493 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
double mnHeight
static BitmapColor GetPixelForN4BitLsnPal(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:74
Scanline GetBuffer() const
static BitmapColor GetPixelForN8BitTcMask(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:105
ColorMask maColorMask
static void SetPixelForN32BitTcRgba(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:354
Scanline GetScanline(long nY) const
void Merge(const Color &rMergeColor, sal_uInt8 cTransparency)
BitmapColor GetColorWithFallback(double fY, double fX, const BitmapColor &rFallback) const
Get the color at coordinates fY, fX; if outside, return rFallback.
Definition: bmpacc.cxx:348
virtual ~BitmapReadAccess() override
Definition: bmpacc.cxx:109
virtual ~BitmapInfoAccess()
Definition: bmpacc.cxx:71
const std::shared_ptr< SalBitmap > & ImplGetSalBitmap() const
Definition: bitmap.hxx:518
sal_uIntPtr sal_uLong
static BitmapColor GetPixelForN32BitTcArgb(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:230
static void SetPixelForN32BitTcBgrx(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:317
SAL_DLLPRIVATE bool ImplSetAccessPointers(ScanlineFormat nFormat)
Definition: bmpacc.cxx:122
static BitmapColor GetPixelForN32BitTcBgrx(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:294
sal_uInt16 GetBestPaletteIndex(const BitmapColor &rBitmapColor) const
Definition: bmpacc.cxx:81
long Width() const
static void SetPixelForN32BitTcXrgb(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:269
static void SetPixelForN24BitTcBgr(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:154
static BitmapColor GetPixelForN32BitTcRgba(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:326
static void SetPixelForN32BitTcMask(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:381
static void SetPixelForN4BitMsnPal(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:58
ScanlineFormat
Definition: Scanline.hxx:28
static BitmapColor GetPixelForN4BitMsnPal(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:53
static BitmapColor GetPixelForN32BitTcMask(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:374
static BitmapColor GetPixelForN16BitTcMsbMask(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:118
BitmapReadAccess(Bitmap &rBitmap, BitmapAccessMode nMode=BitmapAccessMode::Read)
Definition: bmpacc.cxx:86
static BitmapColor GetPixelForN8BitPal(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:95
BitmapColor GetInterpolatedColorWithFallback(double fY, double fX, const BitmapColor &rFallback) const
Get the interpolated color at coordinates fY, fX; if outside, return rFallback.
Definition: bmpacc.cxx:259
void SetPixelOnData(sal_uInt8 *pData, long nX, const BitmapColor &rBitmapColor)
static BitmapColor GetPixelForN32BitTcBgra(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:278
BitmapBuffer * mpBuffer
static BitmapColor GetPixelForN1BitMsbPal(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:23
static BitmapColor GetPixelForN32BitTcXbgr(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:198
ScanlineFormat mnFormat
FncGetPixel mFncGetPixel
ImplSVData * ImplGetSVData()
Definition: svdata.cxx:66
sal_uInt8 * Scanline
Definition: Scanline.hxx:25
static void SetPixelForN16BitTcLsbMask(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:137
static void SetPixelForN32BitTcXbgr(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:221
sal_uInt32 GetScanlineSize() const
#define DBG_ASSERT(sCon, aError)
bool HasPalette() const
ScanlineFormat GetScanlineFormat() const
static BitmapColor GetPixelForN24BitTcBgr(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:142
virtual std::shared_ptr< vcl::BackendCapabilities > GetBackendCapabilities()
Definition: salinst.hxx:135
BitmapAccessMode
BitmapWriteAccess()=delete
sal_uInt8 * mpBits
static BitmapColor GetPixelForN32BitTcXrgb(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:246
static BitmapColor GetPixelForN16BitTcLsbMask(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:130
void CopyBuffer(const BitmapReadAccess &rReadAcc)
Definition: bmpacc.cxx:476
static BitmapColor GetPixelForN32BitTcAbgr(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:182
sal_uInt16 GetBestIndex(const BitmapColor &rCol) const
FncSetPixel mFncSetPixel
const sal_uInt8 * ConstScanline
Definition: Scanline.hxx:26
BitmapInfoAccess(Bitmap &rBitmap, BitmapAccessMode nMode=BitmapAccessMode::Info)
Definition: bmpacc.cxx:32
static BitmapColor GetPixelForN32BitTcRgbx(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:342
static void SetPixelForN16BitTcMsbMask(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:125
long Height() const
#define SAL_WARN_IF(condition, area, stream)
static void SetPixelForN8BitPal(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:100
BitmapColor GetColor(long nY, long nX) const
double mnWidth
static void SetPixelForN1BitLsbPal(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:43
static void SetPixelForN32BitTcBgra(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:306
ColorMask maColorMask
BitmapColor GetPixelFromData(const sal_uInt8 *pData, long nX) const
ScanlineFormat RemoveScanline(ScanlineFormat nFormat)
Definition: Scanline.hxx:60
SAL_DLLPRIVATE void ImplMakeUnique()
BitmapPalette maPalette
static void SetPixelForN4BitLsnPal(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:79
static void SetPixelForN32BitTcRgbx(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:365
virtual ~BitmapWriteAccess() override
Definition: bmpacc.cxx:371
void CopyScanline(long nY, const BitmapReadAccess &rReadAcc)
Definition: bmpacc.cxx:375
BitmapAccessMode const mnAccessMode
static BitmapColor GetPixelForN1BitLsbPal(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:38
sal_uInt16 GetBitCount() const
static BitmapColor GetPixelForN24BitTcRgb(ConstScanline pScanline, long nX, const ColorMask &rMask)
Definition: bmpacc2.cxx:162
BitmapColor(* FncGetPixel)(ConstScanline pScanline, long nX, const ColorMask &rMask)
static void SetPixelForN8BitTcMask(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:112
static void SetPixelForN1BitMsbPal(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:28
static void SetPixelForN32BitTcArgb(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:258
static void SetPixelForN32BitTcAbgr(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:210
SalInstance * mpDefInst
Definition: svdata.hxx:341
static void SetPixelForN24BitTcRgb(Scanline pScanline, long nX, const BitmapColor &rBitmapColor, const ColorMask &rMask)
Definition: bmpacc2.cxx:174
SAL_DLLPRIVATE void ImplSetSalBitmap(const std::shared_ptr< SalBitmap > &xImpBmp)