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_dib.h" | 7 #include "../../../include/fxge/fx_dib.h" |
8 #include "../../../include/fxge/fx_ge.h" | 8 #include "../../../include/fxge/fx_ge.h" |
9 #include "../../../include/fxcodec/fx_codec.h" | 9 #include "../../../include/fxcodec/fx_codec.h" |
10 #include "dib_int.h" | 10 #include "dib_int.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 return FALSE; | 78 return FALSE; |
79 } | 79 } |
80 if (pBuffer) { | 80 if (pBuffer) { |
81 m_pBuffer = pBuffer; | 81 m_pBuffer = pBuffer; |
82 m_bExtBuf = TRUE; | 82 m_bExtBuf = TRUE; |
83 } else { | 83 } else { |
84 int size = pitch * height + 4; | 84 int size = pitch * height + 4; |
85 int oomlimit = _MAX_OOM_LIMIT_; | 85 int oomlimit = _MAX_OOM_LIMIT_; |
86 if (oomlimit >= 0 && size >= oomlimit) { | 86 if (oomlimit >= 0 && size >= oomlimit) { |
87 m_pBuffer = FX_TryAlloc(FX_BYTE, size); | 87 m_pBuffer = FX_TryAlloc(FX_BYTE, size); |
| 88 if (m_pBuffer == NULL) { |
| 89 return FALSE; |
| 90 } |
88 } else { | 91 } else { |
89 m_pBuffer = FX_Alloc(FX_BYTE, size); | 92 m_pBuffer = FX_Alloc(FX_BYTE, size); |
90 } | 93 } |
91 if (m_pBuffer == NULL) { | |
92 return FALSE; | |
93 } | |
94 } | 94 } |
95 m_Width = width; | 95 m_Width = width; |
96 m_Height = height; | 96 m_Height = height; |
97 m_Pitch = pitch; | 97 m_Pitch = pitch; |
98 if (HasAlpha() && format != FXDIB_Argb) { | 98 if (HasAlpha() && format != FXDIB_Argb) { |
99 FX_BOOL ret = TRUE; | 99 FX_BOOL ret = TRUE; |
100 ret = BuildAlphaMask(); | 100 ret = BuildAlphaMask(); |
101 if (!ret) { | 101 if (!ret) { |
102 if (!m_bExtBuf && m_pBuffer) { | 102 if (!m_bExtBuf && m_pBuffer) { |
103 FX_Free(m_pBuffer); | 103 FX_Free(m_pBuffer); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 } | 198 } |
199 return pNewBitmap; | 199 return pNewBitmap; |
200 } | 200 } |
201 void CFX_DIBSource::BuildPalette() | 201 void CFX_DIBSource::BuildPalette() |
202 { | 202 { |
203 if (m_pPalette) { | 203 if (m_pPalette) { |
204 return; | 204 return; |
205 } | 205 } |
206 if (GetBPP() == 1) { | 206 if (GetBPP() == 1) { |
207 m_pPalette = FX_Alloc(FX_DWORD, 2); | 207 m_pPalette = FX_Alloc(FX_DWORD, 2); |
208 if (!m_pPalette) { | |
209 return; | |
210 } | |
211 if(IsCmykImage()) { | 208 if(IsCmykImage()) { |
212 m_pPalette[0] = 0xff; | 209 m_pPalette[0] = 0xff; |
213 m_pPalette[1] = 0; | 210 m_pPalette[1] = 0; |
214 } else { | 211 } else { |
215 m_pPalette[0] = 0xff000000; | 212 m_pPalette[0] = 0xff000000; |
216 m_pPalette[1] = 0xffffffff; | 213 m_pPalette[1] = 0xffffffff; |
217 } | 214 } |
218 } else if (GetBPP() == 8) { | 215 } else if (GetBPP() == 8) { |
219 m_pPalette = FX_Alloc(FX_DWORD, 256); | 216 m_pPalette = FX_Alloc(FX_DWORD, 256); |
220 if (!m_pPalette) { | |
221 return; | |
222 } | |
223 if(IsCmykImage()) { | 217 if(IsCmykImage()) { |
224 for (int i = 0; i < 256; i ++) { | 218 for (int i = 0; i < 256; i ++) { |
225 m_pPalette[i] = 0xff - i; | 219 m_pPalette[i] = 0xff - i; |
226 } | 220 } |
227 } else { | 221 } else { |
228 for (int i = 0; i < 256; i ++) { | 222 for (int i = 0; i < 256; i ++) { |
229 m_pPalette[i] = 0xff000000 | (i * 0x10101); | 223 m_pPalette[i] = 0xff000000 | (i * 0x10101); |
230 } | 224 } |
231 } | 225 } |
232 } | 226 } |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 if (pSrc == NULL || GetBPP() > 8) { | 524 if (pSrc == NULL || GetBPP() > 8) { |
531 if (m_pPalette) { | 525 if (m_pPalette) { |
532 FX_Free(m_pPalette); | 526 FX_Free(m_pPalette); |
533 } | 527 } |
534 m_pPalette = NULL; | 528 m_pPalette = NULL; |
535 } else { | 529 } else { |
536 FX_DWORD pal_size = 1 << GetBPP(); | 530 FX_DWORD pal_size = 1 << GetBPP(); |
537 if (m_pPalette == NULL) { | 531 if (m_pPalette == NULL) { |
538 m_pPalette = FX_Alloc(FX_DWORD, pal_size); | 532 m_pPalette = FX_Alloc(FX_DWORD, pal_size); |
539 } | 533 } |
540 if (!m_pPalette) { | |
541 return; | |
542 } | |
543 if (pal_size > size) { | 534 if (pal_size > size) { |
544 pal_size = size; | 535 pal_size = size; |
545 } | 536 } |
546 FXSYS_memcpy32(m_pPalette, pSrc, pal_size * sizeof(FX_DWORD)); | 537 FXSYS_memcpy32(m_pPalette, pSrc, pal_size * sizeof(FX_DWORD)); |
547 } | 538 } |
548 } | 539 } |
549 void CFX_DIBSource::GetPalette(FX_DWORD* pal, int alpha) const | 540 void CFX_DIBSource::GetPalette(FX_DWORD* pal, int alpha) const |
550 { | 541 { |
551 ASSERT(GetBPP() <= 8 && !IsCmykImage()); | 542 ASSERT(GetBPP() <= 8 && !IsCmykImage()); |
552 if (GetBPP() == 1) { | 543 if (GetBPP() == 1) { |
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 if (!m_pBitmap->Create(width, height, src_format)) { | 1705 if (!m_pBitmap->Create(width, height, src_format)) { |
1715 delete m_pBitmap; | 1706 delete m_pBitmap; |
1716 m_pBitmap = NULL; | 1707 m_pBitmap = NULL; |
1717 return FALSE; | 1708 return FALSE; |
1718 } | 1709 } |
1719 if (pSrcPalette) { | 1710 if (pSrcPalette) { |
1720 m_pBitmap->CopyPalette(pSrcPalette); | 1711 m_pBitmap->CopyPalette(pSrcPalette); |
1721 } | 1712 } |
1722 return TRUE; | 1713 return TRUE; |
1723 } | 1714 } |
OLD | NEW |