Resolves: #i125000# check last status of newly created...
<Gdiplus::Bitmap> instance before using it. (cherry picked from commit b127235917610b9c68e19df29bb39af496906569) Change-Id: I97364cf963424b0e8d0b52b3c995bd4defdca067
This commit is contained in:
committed by
Caolán McNamara
parent
a10a621b48
commit
adb1bb21f8
@@ -317,24 +317,32 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap()
|
|||||||
|
|
||||||
if(pRetval)
|
if(pRetval)
|
||||||
{
|
{
|
||||||
sal_uInt8* pSrcRGB(pRGB->mpBits);
|
if ( pRetval->GetLastStatus() == Gdiplus::Ok )
|
||||||
const sal_uInt32 nExtraRGB(pRGB->mnScanlineSize - (nW * 3));
|
|
||||||
const bool bTopDown(pRGB->mnFormat & BMP_FORMAT_TOP_DOWN);
|
|
||||||
const Gdiplus::Rect aAllRect(0, 0, nW, nH);
|
|
||||||
Gdiplus::BitmapData aGdiPlusBitmapData;
|
|
||||||
pRetval->LockBits(&aAllRect, Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &aGdiPlusBitmapData);
|
|
||||||
|
|
||||||
// copy data to Gdiplus::Bitmap; format is BGR here in both cases, so memcpy is possible
|
|
||||||
for(sal_uInt32 y(0); y < nH; y++)
|
|
||||||
{
|
{
|
||||||
const sal_uInt32 nYInsert(bTopDown ? y : nH - y - 1);
|
sal_uInt8* pSrcRGB(pRGB->mpBits);
|
||||||
sal_uInt8* targetPixels = (sal_uInt8*)aGdiPlusBitmapData.Scan0 + (nYInsert * aGdiPlusBitmapData.Stride);
|
const sal_uInt32 nExtraRGB(pRGB->mnScanlineSize - (nW * 3));
|
||||||
|
const bool bTopDown(pRGB->mnFormat & BMP_FORMAT_TOP_DOWN);
|
||||||
|
const Gdiplus::Rect aAllRect(0, 0, nW, nH);
|
||||||
|
Gdiplus::BitmapData aGdiPlusBitmapData;
|
||||||
|
pRetval->LockBits(&aAllRect, Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &aGdiPlusBitmapData);
|
||||||
|
|
||||||
memcpy(targetPixels, pSrcRGB, nW * 3);
|
// copy data to Gdiplus::Bitmap; format is BGR here in both cases, so memcpy is possible
|
||||||
pSrcRGB += nW * 3 + nExtraRGB;
|
for(sal_uInt32 y(0); y < nH; y++)
|
||||||
|
{
|
||||||
|
const sal_uInt32 nYInsert(bTopDown ? y : nH - y - 1);
|
||||||
|
sal_uInt8* targetPixels = (sal_uInt8*)aGdiPlusBitmapData.Scan0 + (nYInsert * aGdiPlusBitmapData.Stride);
|
||||||
|
|
||||||
|
memcpy(targetPixels, pSrcRGB, nW * 3);
|
||||||
|
pSrcRGB += nW * 3 + nExtraRGB;
|
||||||
|
}
|
||||||
|
|
||||||
|
pRetval->UnlockBits(&aGdiPlusBitmapData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete pRetval;
|
||||||
|
pRetval = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pRetval->UnlockBits(&aGdiPlusBitmapData);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user