Author: alg
Date: Fri Sep 6 08:01:16 2013
New Revision: 1520504
URL: http://svn.apache.org/r1520504
Log:
i122923 Added missing stuff from that task
Modified:
openoffice/branches/AOO401/main/vcl/win/source/gdi/salbmp.cxx
Modified: openoffice/branches/AOO401/main/vcl/win/source/gdi/salbmp.cxx
URL:
http://svn.apache.org/viewvc/openoffice/branches/AOO401/main/vcl/win/source/gdi/salbmp.cxx?rev=1520504&r1=1520503&r2=1520504&view=diff
==============================================================================
--- openoffice/branches/AOO401/main/vcl/win/source/gdi/salbmp.cxx (original)
+++ openoffice/branches/AOO401/main/vcl/win/source/gdi/salbmp.cxx Fri Sep 6
08:01:16 2013
@@ -313,22 +313,21 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreat
sal_uInt8* pSrcRGB(pRGB->mpBits);
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);
- for(sal_uInt32 x(0); x < nW; x++)
- {
- const sal_uInt8 nB(*pSrcRGB++);
- const sal_uInt8 nG(*pSrcRGB++);
- const sal_uInt8 nR(*pSrcRGB++);
-
- pRetval->SetPixel(x, nYInsert, Gdiplus::Color(nR, nG, nB));
- }
-
- pSrcRGB += nExtraRGB;
+ memcpy(targetPixels, pSrcRGB, nW * 3);
+ pSrcRGB += nW * 3 + nExtraRGB;
}
+
+ pRetval->UnlockBits(&aGdiPlusBitmapData);
}
}
@@ -443,24 +442,30 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreat
const sal_uInt32 nExtraRGB(pRGB->mnScanlineSize - (nW * 3));
const sal_uInt32 nExtraA(pA->mnScanlineSize - nW);
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,
PixelFormat32bppARGB, &aGdiPlusBitmapData);
+ // copy data to Gdiplus::Bitmap; format is BGRA; need to mix BGR
from Bitmap and
+ // A from alpha, so inner loop is needed (who invented BitmapEx..?)
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);
for(sal_uInt32 x(0); x < nW; x++)
{
- const sal_uInt8 nB(*pSrcRGB++);
- const sal_uInt8 nG(*pSrcRGB++);
- const sal_uInt8 nR(*pSrcRGB++);
- const sal_uInt8 nA(0xff - *pSrcA++);
-
- pRetval->SetPixel(x, nYInsert, Gdiplus::Color(nA, nR, nG,
nB));
+ *targetPixels++ = *pSrcRGB++;
+ *targetPixels++ = *pSrcRGB++;
+ *targetPixels++ = *pSrcRGB++;
+ *targetPixels++ = 0xff - *pSrcA++;
}
pSrcRGB += nExtraRGB;
pSrcA += nExtraA;
}
+
+ pRetval->UnlockBits(&aGdiPlusBitmapData);
}
}