| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../../include/fxge/fx_ge.h" | 7 #include "../../../include/fxge/fx_ge.h" |
| 8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ | 8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ |
| 9 #include <windows.h> | 9 #include <windows.h> |
| 10 #include "../../../include/fxge/fx_ge_win32.h" | 10 #include "../../../include/fxge/fx_ge_win32.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData, FX_BOOL
bAlpha) | 52 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData, FX_BOOL
bAlpha) |
| 53 { | 53 { |
| 54 int width = pbmi->bmiHeader.biWidth; | 54 int width = pbmi->bmiHeader.biWidth; |
| 55 int height = pbmi->bmiHeader.biHeight; | 55 int height = pbmi->bmiHeader.biHeight; |
| 56 BOOL bBottomUp = TRUE; | 56 BOOL bBottomUp = TRUE; |
| 57 if (height < 0) { | 57 if (height < 0) { |
| 58 height = -height; | 58 height = -height; |
| 59 bBottomUp = FALSE; | 59 bBottomUp = FALSE; |
| 60 } | 60 } |
| 61 int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4; | 61 int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4; |
| 62 CFX_DIBitmap* pBitmap = FX_NEW CFX_DIBitmap; | 62 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; |
| 63 if (!pBitmap) { | |
| 64 return NULL; | |
| 65 } | |
| 66 FXDIB_Format format = bAlpha ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0
x200) : (FXDIB_Format)pbmi->bmiHeader.biBitCount; | 63 FXDIB_Format format = bAlpha ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0
x200) : (FXDIB_Format)pbmi->bmiHeader.biBitCount; |
| 67 FX_BOOL ret = pBitmap->Create(width, height, format); | 64 FX_BOOL ret = pBitmap->Create(width, height, format); |
| 68 if (!ret) { | 65 if (!ret) { |
| 69 delete pBitmap; | 66 delete pBitmap; |
| 70 return NULL; | 67 return NULL; |
| 71 } | 68 } |
| 72 FXSYS_memcpy32(pBitmap->GetBuffer(), pData, pitch * height); | 69 FXSYS_memcpy32(pBitmap->GetBuffer(), pData, pitch * height); |
| 73 if (bBottomUp) { | 70 if (bBottomUp) { |
| 74 FX_LPBYTE temp_buf = FX_Alloc(FX_BYTE, pitch); | 71 FX_LPBYTE temp_buf = FX_Alloc(FX_BYTE, pitch); |
| 75 if (!temp_buf) { | 72 if (!temp_buf) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 args.path_name = filename; | 125 args.path_name = filename; |
| 129 return pPlatform->m_GdiplusExt.LoadDIBitmap(args); | 126 return pPlatform->m_GdiplusExt.LoadDIBitmap(args); |
| 130 } | 127 } |
| 131 HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)filename, IMAGE_BITMAP
, 0, 0, LR_LOADFROMFILE); | 128 HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)filename, IMAGE_BITMAP
, 0, 0, LR_LOADFROMFILE); |
| 132 if (hBitmap == NULL) { | 129 if (hBitmap == NULL) { |
| 133 return NULL; | 130 return NULL; |
| 134 } | 131 } |
| 135 HDC hDC = CreateCompatibleDC(NULL); | 132 HDC hDC = CreateCompatibleDC(NULL); |
| 136 int width, height; | 133 int width, height; |
| 137 GetBitmapSize(hBitmap, width, height); | 134 GetBitmapSize(hBitmap, width, height); |
| 138 CFX_DIBitmap* pDIBitmap = FX_NEW CFX_DIBitmap; | 135 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; |
| 139 if (!pDIBitmap) { | |
| 140 DeleteDC(hDC); | |
| 141 return NULL; | |
| 142 } | |
| 143 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) { | 136 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) { |
| 144 delete pDIBitmap; | 137 delete pDIBitmap; |
| 145 DeleteDC(hDC); | 138 DeleteDC(hDC); |
| 146 return NULL; | 139 return NULL; |
| 147 } | 140 } |
| 148 CFX_ByteString info = GetBitmapInfo(pDIBitmap); | 141 CFX_ByteString info = GetBitmapInfo(pDIBitmap); |
| 149 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAP
INFO*)info.c_str(), DIB_RGB_COLORS); | 142 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAP
INFO*)info.c_str(), DIB_RGB_COLORS); |
| 150 if (!ret) { | 143 if (!ret) { |
| 151 if (pDIBitmap) { | 144 if (pDIBitmap) { |
| 152 delete pDIBitmap; | 145 delete pDIBitmap; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 164 } else if (args.flags == WINDIB_OPEN_MEMORY) { | 157 } else if (args.flags == WINDIB_OPEN_MEMORY) { |
| 165 return NULL; | 158 return NULL; |
| 166 } | 159 } |
| 167 HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)args.path_name, IMAGE_
BITMAP, 0, 0, LR_LOADFROMFILE); | 160 HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)args.path_name, IMAGE_
BITMAP, 0, 0, LR_LOADFROMFILE); |
| 168 if (hBitmap == NULL) { | 161 if (hBitmap == NULL) { |
| 169 return NULL; | 162 return NULL; |
| 170 } | 163 } |
| 171 HDC hDC = CreateCompatibleDC(NULL); | 164 HDC hDC = CreateCompatibleDC(NULL); |
| 172 int width, height; | 165 int width, height; |
| 173 GetBitmapSize(hBitmap, width, height); | 166 GetBitmapSize(hBitmap, width, height); |
| 174 CFX_DIBitmap* pDIBitmap = FX_NEW CFX_DIBitmap; | 167 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; |
| 175 if (!pDIBitmap) { | |
| 176 DeleteDC(hDC); | |
| 177 return NULL; | |
| 178 } | |
| 179 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) { | 168 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) { |
| 180 delete pDIBitmap; | 169 delete pDIBitmap; |
| 181 DeleteDC(hDC); | 170 DeleteDC(hDC); |
| 182 return NULL; | 171 return NULL; |
| 183 } | 172 } |
| 184 CFX_ByteString info = GetBitmapInfo(pDIBitmap); | 173 CFX_ByteString info = GetBitmapInfo(pDIBitmap); |
| 185 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAP
INFO*)info.c_str(), DIB_RGB_COLORS); | 174 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAP
INFO*)info.c_str(), DIB_RGB_COLORS); |
| 186 if (!ret) { | 175 if (!ret) { |
| 187 if (pDIBitmap) { | 176 if (pDIBitmap) { |
| 188 delete pDIBitmap; | 177 delete pDIBitmap; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 199 hDC = CreateCompatibleDC(NULL); | 188 hDC = CreateCompatibleDC(NULL); |
| 200 } | 189 } |
| 201 BITMAPINFOHEADER bmih; | 190 BITMAPINFOHEADER bmih; |
| 202 FXSYS_memset32(&bmih, 0, sizeof bmih); | 191 FXSYS_memset32(&bmih, 0, sizeof bmih); |
| 203 bmih.biSize = sizeof bmih; | 192 bmih.biSize = sizeof bmih; |
| 204 GetDIBits(hDC, hBitmap, 0, 0, NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS); | 193 GetDIBits(hDC, hBitmap, 0, 0, NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS); |
| 205 int width = bmih.biWidth; | 194 int width = bmih.biWidth; |
| 206 int height = abs(bmih.biHeight); | 195 int height = abs(bmih.biHeight); |
| 207 bmih.biHeight = -height; | 196 bmih.biHeight = -height; |
| 208 bmih.biCompression = BI_RGB; | 197 bmih.biCompression = BI_RGB; |
| 209 CFX_DIBitmap* pDIBitmap = FX_NEW CFX_DIBitmap; | 198 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; |
| 210 if (!pDIBitmap) { | |
| 211 return NULL; | |
| 212 } | |
| 213 int ret = 0; | 199 int ret = 0; |
| 214 if (bmih.biBitCount == 1 || bmih.biBitCount == 8) { | 200 if (bmih.biBitCount == 1 || bmih.biBitCount == 8) { |
| 215 int size = sizeof (BITMAPINFOHEADER) + 8; | 201 int size = sizeof (BITMAPINFOHEADER) + 8; |
| 216 if (bmih.biBitCount == 8) { | 202 if (bmih.biBitCount == 8) { |
| 217 size += sizeof (FX_DWORD) * 254; | 203 size += sizeof (FX_DWORD) * 254; |
| 218 } | 204 } |
| 219 BITMAPINFO* pbmih = (BITMAPINFO*)FX_Alloc(FX_BYTE, size); | 205 BITMAPINFO* pbmih = (BITMAPINFO*)FX_Alloc(FX_BYTE, size); |
| 220 if (!pbmih) { | 206 if (!pbmih) { |
| 221 delete pDIBitmap; | 207 delete pDIBitmap; |
| 222 if (bCreatedDC) { | 208 if (bCreatedDC) { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 } | 286 } |
| 301 void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) | 287 void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) |
| 302 { | 288 { |
| 303 ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY); | 289 ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY); |
| 304 } | 290 } |
| 305 void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) | 291 void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) |
| 306 { | 292 { |
| 307 ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY); | 293 ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY); |
| 308 } | 294 } |
| 309 #endif | 295 #endif |
| OLD | NEW |