Kaydet (Commit) 6a01c2d4 authored tarafından Marco Cecchetti's avatar Marco Cecchetti Kaydeden (comit) Marco Cecchetti

tdf#107682 - Repeated images replace correct ones in exported PDF

The problem was due to the buffer acquire methods: in Bitmap::Checksum
(old implementation) Bitmap::AcquireReadAccess is used to get the bitmap
buffer: indeed this method relies on SalBitmap::AcquireBuffer (which is
used in the new implementation) but in case the buffer acquisition
fails, instead of giving up, it tries to update the imp bitmap instance
embedded in the bitmap (see BitmapInfoAccess::ImplCreate).

The solution is to perform this further attemp in Bitmap::Checksum when
the value returned by ImpBitmap::GetChecksum is 0.

Change-Id: Ib901ac941db57756e9a951bacbc573ca206316e0
Reviewed-on: https://gerrit.libreoffice.org/38165Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMarco Cecchetti <mrcekets@gmail.com>
üst b0067837
...@@ -275,6 +275,21 @@ BitmapChecksum Bitmap::GetChecksum() const ...@@ -275,6 +275,21 @@ BitmapChecksum Bitmap::GetChecksum() const
if( mxImpBmp ) if( mxImpBmp )
{ {
nRet = mxImpBmp->ImplGetChecksum(); nRet = mxImpBmp->ImplGetChecksum();
if (!nRet)
{
// nRet == 0 => probably, we were not able to acquire
// the buffer in SalBitmap::updateChecksum;
// so, we need to update the imp bitmap for this bitmap instance
// as we do in BitmapInfoAccess::ImplCreate
std::shared_ptr<ImpBitmap> xNewImpBmp(new ImpBitmap);
if (xNewImpBmp->ImplCreate(*mxImpBmp, GetBitCount()))
{
Bitmap* pThis = const_cast<Bitmap*>(this);
pThis->mxImpBmp = xNewImpBmp;
nRet = mxImpBmp->ImplGetChecksum();
}
}
} }
return nRet; return nRet;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment