Kaydet (Commit) adb1bb21 authored tarafından Oliver-Rainer Wittmann's avatar Oliver-Rainer Wittmann Kaydeden (comit) Caolán McNamara

Resolves: #i125000# check last status of newly created...

<Gdiplus::Bitmap> instance before using it.

(cherry picked from commit b1272359)

Change-Id: I97364cf963424b0e8d0b52b3c995bd4defdca067
üst a10a621b
...@@ -317,24 +317,32 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap() ...@@ -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);
// 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* targetPixels = (sal_uInt8*)aGdiPlusBitmapData.Scan0 + (nYInsert * aGdiPlusBitmapData.Stride);
memcpy(targetPixels, pSrcRGB, nW * 3); memcpy(targetPixels, pSrcRGB, nW * 3);
pSrcRGB += nW * 3 + nExtraRGB; pSrcRGB += nW * 3 + nExtraRGB;
} }
pRetval->UnlockBits(&aGdiPlusBitmapData); pRetval->UnlockBits(&aGdiPlusBitmapData);
}
else
{
delete pRetval;
pRetval = NULL;
}
} }
} }
......
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