| Index: fpdfsdk/src/fpdfview.cpp
|
| diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp
|
| index cca56e33fbc35fcdd4278642c0d8b1441f8072d5..1c8dcc22f2e07d4e1abf0624c0ee15b16782796e 100644
|
| --- a/fpdfsdk/src/fpdfview.cpp
|
| +++ b/fpdfsdk/src/fpdfview.cpp
|
| @@ -533,10 +533,10 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| pPage->SetPrivateData((void*)1, pContext, DropContext);
|
|
|
| #ifndef _WIN32_WCE
|
| - CFX_DIBitmap* pBitmap = NULL;
|
| - FX_BOOL bBackgroundAlphaNeeded = FALSE;
|
| - bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded();
|
| - if (bBackgroundAlphaNeeded) {
|
| + CFX_DIBitmap* pBitmap = nullptr;
|
| + FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded();
|
| + FX_BOOL bHasImageMask = pPage->HasImageMask();
|
| + if (bBackgroundAlphaNeeded || bHasImageMask) {
|
| pBitmap = new CFX_DIBitmap;
|
| pBitmap->Create(size_x, size_y, FXDIB_Argb);
|
| pBitmap->Clear(0x00ffffff);
|
| @@ -547,13 +547,14 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| pContext->m_pDevice = new CFX_FxgeDevice;
|
| ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
|
| #endif
|
| - } else
|
| + } else {
|
| pContext->m_pDevice = new CFX_WindowsDevice(dc);
|
| + }
|
|
|
| FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
|
| rotate, flags, TRUE, NULL);
|
|
|
| - if (bBackgroundAlphaNeeded) {
|
| + if (bBackgroundAlphaNeeded || bHasImageMask) {
|
| if (pBitmap) {
|
| CFX_WindowsDevice WinDC(dc);
|
|
|
| @@ -566,8 +567,9 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| FXDIB_BLEND_NORMAL, NULL, FALSE, NULL);
|
| WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y);
|
| delete pDst;
|
| - } else
|
| + } else {
|
| WinDC.SetDIBits(pBitmap, 0, 0);
|
| + }
|
| }
|
| }
|
| #else
|
| @@ -668,10 +670,9 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| #endif
|
|
|
| #endif
|
| - if (bBackgroundAlphaNeeded) {
|
| + if (bBackgroundAlphaNeeded || bHasImageMask)
|
| delete pBitmap;
|
| - pBitmap = NULL;
|
| - }
|
| +
|
| delete pContext;
|
| pPage->RemovePrivateData((void*)1);
|
| }
|
|
|