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 const FX_DWORD g_dwWinPalette[256] = { | 10 const FX_DWORD g_dwWinPalette[256] = { |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 } | 195 } |
196 } | 196 } |
197 } | 197 } |
198 CFX_Palette::CFX_Palette() { | 198 CFX_Palette::CFX_Palette() { |
199 m_pPalette = NULL; | 199 m_pPalette = NULL; |
200 m_cLut = NULL; | 200 m_cLut = NULL; |
201 m_aLut = NULL; | 201 m_aLut = NULL; |
202 m_lut = 0; | 202 m_lut = 0; |
203 } | 203 } |
204 CFX_Palette::~CFX_Palette() { | 204 CFX_Palette::~CFX_Palette() { |
205 if (m_pPalette) { | |
206 FX_Free(m_pPalette); | 205 FX_Free(m_pPalette); |
207 } | |
208 if (m_cLut) { | |
209 FX_Free(m_cLut); | 206 FX_Free(m_cLut); |
210 } | |
211 if (m_aLut) { | |
212 FX_Free(m_aLut); | 207 FX_Free(m_aLut); |
213 } | |
214 m_lut = 0; | 208 m_lut = 0; |
215 } | 209 } |
216 FX_BOOL CFX_Palette::BuildPalette(const CFX_DIBSource* pBitmap, int pal_type) { | 210 FX_BOOL CFX_Palette::BuildPalette(const CFX_DIBSource* pBitmap, int pal_type) { |
217 if (pBitmap == NULL) { | 211 if (pBitmap == NULL) { |
218 return FALSE; | 212 return FALSE; |
219 } | 213 } |
220 if (m_pPalette != NULL) { | |
221 FX_Free(m_pPalette); | 214 FX_Free(m_pPalette); |
222 } | |
223 m_pPalette = FX_Alloc(FX_DWORD, 256); | 215 m_pPalette = FX_Alloc(FX_DWORD, 256); |
224 int bpp = pBitmap->GetBPP() / 8; | 216 int bpp = pBitmap->GetBPP() / 8; |
225 int width = pBitmap->GetWidth(); | 217 int width = pBitmap->GetWidth(); |
226 int height = pBitmap->GetHeight(); | 218 int height = pBitmap->GetHeight(); |
227 if (m_cLut) { | |
228 FX_Free(m_cLut); | 219 FX_Free(m_cLut); |
229 m_cLut = NULL; | 220 m_cLut = NULL; |
230 } | |
231 if (m_aLut) { | |
232 FX_Free(m_aLut); | 221 FX_Free(m_aLut); |
233 m_aLut = NULL; | 222 m_aLut = NULL; |
234 } | |
235 m_cLut = FX_Alloc(FX_DWORD, 4096); | 223 m_cLut = FX_Alloc(FX_DWORD, 4096); |
236 m_aLut = FX_Alloc(FX_DWORD, 4096); | 224 m_aLut = FX_Alloc(FX_DWORD, 4096); |
237 int row, col; | 225 int row, col; |
238 m_lut = 0; | 226 m_lut = 0; |
239 for (row = 0; row < height; row++) { | 227 for (row = 0; row < height; row++) { |
240 uint8_t* scan_line = (uint8_t*)pBitmap->GetScanline(row); | 228 uint8_t* scan_line = (uint8_t*)pBitmap->GetScanline(row); |
241 for (col = 0; col < width; col++) { | 229 for (col = 0; col < width; col++) { |
242 uint8_t* src_port = scan_line + col * bpp; | 230 uint8_t* src_port = scan_line + col * bpp; |
243 FX_DWORD b = src_port[0] & 0xf0; | 231 FX_DWORD b = src_port[0] & 0xf0; |
244 FX_DWORD g = src_port[1] & 0xf0; | 232 FX_DWORD g = src_port[1] & 0xf0; |
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1128 pSrcAlpha = NULL; | 1116 pSrcAlpha = NULL; |
1129 } | 1117 } |
1130 if (!ret) { | 1118 if (!ret) { |
1131 delete pClone; | 1119 delete pClone; |
1132 return NULL; | 1120 return NULL; |
1133 } | 1121 } |
1134 FX_DWORD* pal_8bpp = NULL; | 1122 FX_DWORD* pal_8bpp = NULL; |
1135 ret = ConvertBuffer(dest_format, pClone->GetBuffer(), pClone->GetPitch(), | 1123 ret = ConvertBuffer(dest_format, pClone->GetBuffer(), pClone->GetPitch(), |
1136 m_Width, m_Height, this, 0, 0, pal_8bpp, pIccTransform); | 1124 m_Width, m_Height, this, 0, 0, pal_8bpp, pIccTransform); |
1137 if (!ret) { | 1125 if (!ret) { |
1138 if (pal_8bpp) { | |
1139 FX_Free(pal_8bpp); | 1126 FX_Free(pal_8bpp); |
1140 } | |
1141 delete pClone; | 1127 delete pClone; |
1142 return NULL; | 1128 return NULL; |
1143 } | 1129 } |
1144 if (pal_8bpp) { | 1130 if (pal_8bpp) { |
1145 pClone->CopyPalette(pal_8bpp); | 1131 pClone->CopyPalette(pal_8bpp); |
1146 FX_Free(pal_8bpp); | 1132 FX_Free(pal_8bpp); |
1147 pal_8bpp = NULL; | 1133 pal_8bpp = NULL; |
1148 } | 1134 } |
1149 return pClone; | 1135 return pClone; |
1150 } | 1136 } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1208 } else { | 1194 } else { |
1209 pAlphaMask = m_pAlphaMask; | 1195 pAlphaMask = m_pAlphaMask; |
1210 } | 1196 } |
1211 } | 1197 } |
1212 } | 1198 } |
1213 FX_BOOL ret = FALSE; | 1199 FX_BOOL ret = FALSE; |
1214 FX_DWORD* pal_8bpp = NULL; | 1200 FX_DWORD* pal_8bpp = NULL; |
1215 ret = ConvertBuffer(dest_format, dest_buf, dest_pitch, m_Width, m_Height, | 1201 ret = ConvertBuffer(dest_format, dest_buf, dest_pitch, m_Width, m_Height, |
1216 this, 0, 0, pal_8bpp, pIccTransform); | 1202 this, 0, 0, pal_8bpp, pIccTransform); |
1217 if (!ret) { | 1203 if (!ret) { |
1218 if (pal_8bpp) { | |
1219 FX_Free(pal_8bpp); | 1204 FX_Free(pal_8bpp); |
1220 } | |
1221 if (pAlphaMask != m_pAlphaMask) { | 1205 if (pAlphaMask != m_pAlphaMask) { |
1222 delete pAlphaMask; | 1206 delete pAlphaMask; |
1223 } | 1207 } |
1224 if (dest_buf) { | |
1225 FX_Free(dest_buf); | 1208 FX_Free(dest_buf); |
1226 } | |
1227 return FALSE; | 1209 return FALSE; |
1228 } | 1210 } |
1229 if (m_pAlphaMask && pAlphaMask != m_pAlphaMask) { | 1211 if (m_pAlphaMask && pAlphaMask != m_pAlphaMask) { |
1230 delete m_pAlphaMask; | 1212 delete m_pAlphaMask; |
1231 } | 1213 } |
1232 m_pAlphaMask = pAlphaMask; | 1214 m_pAlphaMask = pAlphaMask; |
1233 if (m_pPalette) { | |
1234 FX_Free(m_pPalette); | 1215 FX_Free(m_pPalette); |
1235 } | |
1236 m_pPalette = pal_8bpp; | 1216 m_pPalette = pal_8bpp; |
1237 if (!m_bExtBuf) { | 1217 if (!m_bExtBuf) { |
1238 FX_Free(m_pBuffer); | 1218 FX_Free(m_pBuffer); |
1239 } | 1219 } |
1240 m_bExtBuf = FALSE; | 1220 m_bExtBuf = FALSE; |
1241 m_pBuffer = dest_buf; | 1221 m_pBuffer = dest_buf; |
1242 m_bpp = (uint8_t)dest_format; | 1222 m_bpp = (uint8_t)dest_format; |
1243 m_AlphaFlag = (uint8_t)(dest_format >> 8); | 1223 m_AlphaFlag = (uint8_t)(dest_format >> 8); |
1244 m_Pitch = dest_pitch; | 1224 m_Pitch = dest_pitch; |
1245 return TRUE; | 1225 return TRUE; |
1246 } | 1226 } |
OLD | NEW |