Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(504)

Side by Side Diff: core/src/fxge/dib/fx_dib_main.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxge/dib/fx_dib_engine.cpp ('k') | core/src/fxge/dib/fx_dib_transform.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 CFX_DIBitmap::CFX_DIBitmap() 55 CFX_DIBitmap::CFX_DIBitmap()
56 { 56 {
57 m_bExtBuf = FALSE; 57 m_bExtBuf = FALSE;
58 m_pBuffer = NULL; 58 m_pBuffer = NULL;
59 m_pPalette = NULL; 59 m_pPalette = NULL;
60 } 60 }
61 #define _MAX_OOM_LIMIT_ 12000000 61 #define _MAX_OOM_LIMIT_ 12000000
62 FX_BOOL CFX_DIBitmap::Create(int width, int height, FXDIB_Format format, FX_LPBY TE pBuffer, int pitch) 62 FX_BOOL CFX_DIBitmap::Create(int width, int height, FXDIB_Format format, FX_LPBY TE pBuffer, int pitch)
63 { 63 {
64 m_pBuffer = NULL; 64 m_pBuffer = NULL;
65 m_bpp = (FX_BYTE)format; 65 m_bpp = (uint8_t)format;
66 m_AlphaFlag = (FX_BYTE)(format >> 8); 66 m_AlphaFlag = (uint8_t)(format >> 8);
67 m_Width = m_Height = m_Pitch = 0; 67 m_Width = m_Height = m_Pitch = 0;
68 if (width <= 0 || height <= 0 || pitch < 0) { 68 if (width <= 0 || height <= 0 || pitch < 0) {
69 return FALSE; 69 return FALSE;
70 } 70 }
71 if ((INT_MAX - 31) / width < (format & 0xff)) { 71 if ((INT_MAX - 31) / width < (format & 0xff)) {
72 return FALSE; 72 return FALSE;
73 } 73 }
74 if (!pitch) { 74 if (!pitch) {
75 pitch = (width * (format & 0xff) + 31) / 32 * 4; 75 pitch = (width * (format & 0xff) + 31) / 32 * 4;
76 } 76 }
77 if ((1 << 30) / pitch < height) { 77 if ((1 << 30) / pitch < height) {
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(uint8_t, size);
88 if (m_pBuffer == NULL) { 88 if (m_pBuffer == NULL) {
89 return FALSE; 89 return FALSE;
90 } 90 }
91 } else { 91 } else {
92 m_pBuffer = FX_Alloc(FX_BYTE, size); 92 m_pBuffer = FX_Alloc(uint8_t, size);
93 } 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) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 BuildPalette(); 266 BuildPalette();
267 } 267 }
268 m_pPalette[index] = color; 268 m_pPalette[index] = color;
269 } 269 }
270 int CFX_DIBSource::FindPalette(FX_DWORD color) const 270 int CFX_DIBSource::FindPalette(FX_DWORD color) const
271 { 271 {
272 ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask()); 272 ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
273 if (m_pPalette == NULL) { 273 if (m_pPalette == NULL) {
274 if (IsCmykImage()) { 274 if (IsCmykImage()) {
275 if (GetBPP() == 1) { 275 if (GetBPP() == 1) {
276 return ((FX_BYTE)color == 0xff) ? 0 : 1; 276 return ((uint8_t)color == 0xff) ? 0 : 1;
277 } 277 }
278 return 0xff - (FX_BYTE)color; 278 return 0xff - (uint8_t)color;
279 } 279 }
280 if (GetBPP() == 1) { 280 if (GetBPP() == 1) {
281 return ((FX_BYTE)color == 0xff) ? 1 : 0; 281 return ((uint8_t)color == 0xff) ? 1 : 0;
282 } 282 }
283 return (FX_BYTE)color; 283 return (uint8_t)color;
284 } 284 }
285 int palsize = (1 << GetBPP()); 285 int palsize = (1 << GetBPP());
286 for (int i = 0; i < palsize; i ++) 286 for (int i = 0; i < palsize; i ++)
287 if (m_pPalette[i] == color) { 287 if (m_pPalette[i] == color) {
288 return i; 288 return i;
289 } 289 }
290 return -1; 290 return -1;
291 } 291 }
292 void CFX_DIBitmap::Clear(FX_DWORD color) 292 void CFX_DIBitmap::Clear(FX_DWORD color)
293 { 293 {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1); 456 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1);
457 } else { 457 } else {
458 if (alpha_flag >> 8 && !IsCmykImage()) 458 if (alpha_flag >> 8 && !IsCmykImage())
459 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), F XSYS_GetYValue(color), FXSYS_GetKValue(color), 459 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), F XSYS_GetYValue(color), FXSYS_GetKValue(color),
460 color_p[2], color_p[1], color_p[0]); 460 color_p[2], color_p[1], color_p[0]);
461 else if (!(alpha_flag >> 8) && IsCmykImage()) { 461 else if (!(alpha_flag >> 8) && IsCmykImage()) {
462 return FALSE; 462 return FALSE;
463 } 463 }
464 } 464 }
465 if(!IsCmykImage()) { 465 if(!IsCmykImage()) {
466 color_p[3] = (FX_BYTE)alpha; 466 color_p[3] = (uint8_t)alpha;
467 } 467 }
468 if (GetFormat() == FXDIB_Argb) { 468 if (GetFormat() == FXDIB_Argb) {
469 for (int row = 0; row < height; row ++) { 469 for (int row = 0; row < height; row ++) {
470 FX_DWORD* dest_pos = (FX_DWORD*)(m_pBuffer + (dest_top + row) * m_Pi tch + dest_left * 4); 470 FX_DWORD* dest_pos = (FX_DWORD*)(m_pBuffer + (dest_top + row) * m_Pi tch + dest_left * 4);
471 FX_LPCBYTE src_scan = pMask->GetScanline(src_top + row); 471 FX_LPCBYTE src_scan = pMask->GetScanline(src_top + row);
472 if (src_bpp == 1) { 472 if (src_bpp == 1) {
473 for (int col = 0; col < width; col ++) { 473 for (int col = 0; col < width; col ++) {
474 int src_bitpos = src_left + col; 474 int src_bitpos = src_left + col;
475 if (src_scan[src_bitpos / 8] & (1 << (7 - src_bitpos % 8))) { 475 if (src_scan[src_bitpos / 8] & (1 << (7 - src_bitpos % 8))) {
476 *dest_pos = dst_color; 476 *dest_pos = dst_color;
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 FX_BOOL CFX_DIBitmap::GetGrayData(void* pIccTransform) 879 FX_BOOL CFX_DIBitmap::GetGrayData(void* pIccTransform)
880 { 880 {
881 if (m_pBuffer == NULL) { 881 if (m_pBuffer == NULL) {
882 return FALSE; 882 return FALSE;
883 } 883 }
884 switch (GetFormat()) { 884 switch (GetFormat()) {
885 case FXDIB_1bppRgb: { 885 case FXDIB_1bppRgb: {
886 if (m_pPalette == NULL) { 886 if (m_pPalette == NULL) {
887 return FALSE; 887 return FALSE;
888 } 888 }
889 FX_BYTE gray[2]; 889 uint8_t gray[2];
890 for (int i = 0; i < 2; i ++) { 890 for (int i = 0; i < 2; i ++) {
891 int r = (FX_BYTE)(m_pPalette[i] >> 16); 891 int r = (uint8_t)(m_pPalette[i] >> 16);
892 int g = (FX_BYTE)(m_pPalette[i] >> 8); 892 int g = (uint8_t)(m_pPalette[i] >> 8);
893 int b = (FX_BYTE)m_pPalette[i]; 893 int b = (uint8_t)m_pPalette[i];
894 gray[i] = (FX_BYTE)FXRGB2GRAY(r, g, b); 894 gray[i] = (uint8_t)FXRGB2GRAY(r, g, b);
895 } 895 }
896 CFX_DIBitmap* pMask = FX_NEW CFX_DIBitmap; 896 CFX_DIBitmap* pMask = FX_NEW CFX_DIBitmap;
897 if (!pMask) { 897 if (!pMask) {
898 return FALSE; 898 return FALSE;
899 } 899 }
900 if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) { 900 if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
901 delete pMask; 901 delete pMask;
902 return FALSE; 902 return FALSE;
903 } 903 }
904 FXSYS_memset8(pMask->GetBuffer(), gray[0], pMask->GetPitch() * m _Height); 904 FXSYS_memset8(pMask->GetBuffer(), gray[0], pMask->GetPitch() * m _Height);
905 for (int row = 0; row < m_Height; row ++) { 905 for (int row = 0; row < m_Height; row ++) {
906 FX_LPBYTE src_pos = m_pBuffer + row * m_Pitch; 906 FX_LPBYTE src_pos = m_pBuffer + row * m_Pitch;
907 FX_LPBYTE dest_pos = (FX_LPBYTE)pMask->GetScanline(row); 907 FX_LPBYTE dest_pos = (FX_LPBYTE)pMask->GetScanline(row);
908 for (int col = 0; col < m_Width; col ++) { 908 for (int col = 0; col < m_Width; col ++) {
909 if (src_pos[col / 8] & (1 << (7 - col % 8))) { 909 if (src_pos[col / 8] & (1 << (7 - col % 8))) {
910 *dest_pos = gray[1]; 910 *dest_pos = gray[1];
911 } 911 }
912 dest_pos ++; 912 dest_pos ++;
913 } 913 }
914 } 914 }
915 TakeOver(pMask); 915 TakeOver(pMask);
916 delete pMask; 916 delete pMask;
917 break; 917 break;
918 } 918 }
919 case FXDIB_8bppRgb: { 919 case FXDIB_8bppRgb: {
920 if (m_pPalette == NULL) { 920 if (m_pPalette == NULL) {
921 return FALSE; 921 return FALSE;
922 } 922 }
923 FX_BYTE gray[256]; 923 uint8_t gray[256];
924 for (int i = 0; i < 256; i ++) { 924 for (int i = 0; i < 256; i ++) {
925 int r = (FX_BYTE)(m_pPalette[i] >> 16); 925 int r = (uint8_t)(m_pPalette[i] >> 16);
926 int g = (FX_BYTE)(m_pPalette[i] >> 8); 926 int g = (uint8_t)(m_pPalette[i] >> 8);
927 int b = (FX_BYTE)m_pPalette[i]; 927 int b = (uint8_t)m_pPalette[i];
928 gray[i] = (FX_BYTE)FXRGB2GRAY(r, g, b); 928 gray[i] = (uint8_t)FXRGB2GRAY(r, g, b);
929 } 929 }
930 CFX_DIBitmap* pMask = FX_NEW CFX_DIBitmap; 930 CFX_DIBitmap* pMask = FX_NEW CFX_DIBitmap;
931 if (!pMask) { 931 if (!pMask) {
932 return FALSE; 932 return FALSE;
933 } 933 }
934 if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) { 934 if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
935 delete pMask; 935 delete pMask;
936 return FALSE; 936 return FALSE;
937 } 937 }
938 for (int row = 0; row < m_Height; row ++) { 938 for (int row = 0; row < m_Height; row ++) {
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 } 1104 }
1105 } else { 1105 } else {
1106 if (color == 0xffffffff) { 1106 if (color == 0xffffffff) {
1107 *pos |= 1 << (7 - x % 8); 1107 *pos |= 1 << (7 - x % 8);
1108 } else { 1108 } else {
1109 *pos &= ~(1 << (7 - x % 8)); 1109 *pos &= ~(1 << (7 - x % 8));
1110 } 1110 }
1111 } 1111 }
1112 break; 1112 break;
1113 case FXDIB_8bppMask: 1113 case FXDIB_8bppMask:
1114 *pos = (FX_BYTE)(color >> 24); 1114 *pos = (uint8_t)(color >> 24);
1115 break; 1115 break;
1116 case FXDIB_8bppRgb: { 1116 case FXDIB_8bppRgb: {
1117 if (m_pPalette) { 1117 if (m_pPalette) {
1118 for (int i = 0; i < 256; i ++) { 1118 for (int i = 0; i < 256; i ++) {
1119 if (m_pPalette[i] == color) { 1119 if (m_pPalette[i] == color) {
1120 *pos = (FX_BYTE)i; 1120 *pos = (uint8_t)i;
1121 return; 1121 return;
1122 } 1122 }
1123 } 1123 }
1124 *pos = 0; 1124 *pos = 0;
1125 } else { 1125 } else {
1126 *pos = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B (color)); 1126 *pos = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B (color));
1127 } 1127 }
1128 break; 1128 break;
1129 } 1129 }
1130 case FXDIB_Rgb: 1130 case FXDIB_Rgb:
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 } 1239 }
1240 } else if (forecolor == 0 && backcolor == 0xffffff && m_pPalette == NULL ) { 1240 } else if (forecolor == 0 && backcolor == 0xffffff && m_pPalette == NULL ) {
1241 return TRUE; 1241 return TRUE;
1242 } 1242 }
1243 if (m_pPalette == NULL) { 1243 if (m_pPalette == NULL) {
1244 BuildPalette(); 1244 BuildPalette();
1245 } 1245 }
1246 int size = 1 << m_bpp; 1246 int size = 1 << m_bpp;
1247 if (isCmykImage) { 1247 if (isCmykImage) {
1248 for (int i = 0; i < size; i ++) { 1248 for (int i = 0; i < size; i ++) {
1249 FX_BYTE b, g, r; 1249 uint8_t b, g, r;
1250 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(m_pPalette[i]), FXSYS_GetMVal ue(m_pPalette[i]), FXSYS_GetYValue(m_pPalette[i]), FXSYS_GetKValue(m_pPalette[i] ), 1250 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(m_pPalette[i]), FXSYS_GetMVal ue(m_pPalette[i]), FXSYS_GetYValue(m_pPalette[i]), FXSYS_GetKValue(m_pPalette[i] ),
1251 r, g, b); 1251 r, g, b);
1252 int gray = 255 - FXRGB2GRAY(r, g, b); 1252 int gray = 255 - FXRGB2GRAY(r, g, b);
1253 m_pPalette[i] = CmykEncode(bc + (fc - bc) * gray / 255, bm + (fm - bm) * gray / 255, 1253 m_pPalette[i] = CmykEncode(bc + (fc - bc) * gray / 255, bm + (fm - bm) * gray / 255,
1254 by + (fy - by) * gray / 255, bk + (fk - bk) * gray / 255); 1254 by + (fy - by) * gray / 255, bk + (fk - bk) * gray / 255);
1255 } 1255 }
1256 } else 1256 } else
1257 for (int i = 0; i < size; i ++) { 1257 for (int i = 0; i < size; i ++) {
1258 int gray = FXRGB2GRAY(FXARGB_R(m_pPalette[i]), FXARGB_G(m_pPalet te[i]), FXARGB_B(m_pPalette[i])); 1258 int gray = FXRGB2GRAY(FXARGB_R(m_pPalette[i]), FXARGB_G(m_pPalet te[i]), FXARGB_B(m_pPalette[i]));
1259 m_pPalette[i] = FXARGB_MAKE(0xff, br + (fr - br) * gray / 255, b g + (fg - bg) * gray / 255, 1259 m_pPalette[i] = FXARGB_MAKE(0xff, br + (fr - br) * gray / 255, b g + (fg - bg) * gray / 255,
1260 bb + (fb - bb) * gray / 255); 1260 bb + (fb - bb) * gray / 255);
1261 } 1261 }
1262 return TRUE; 1262 return TRUE;
1263 } 1263 }
1264 if (isCmykImage) { 1264 if (isCmykImage) {
1265 if (forecolor == 0xff && backcolor == 0x00) { 1265 if (forecolor == 0xff && backcolor == 0x00) {
1266 for (int row = 0; row < m_Height; row ++) { 1266 for (int row = 0; row < m_Height; row ++) {
1267 FX_LPBYTE scanline = m_pBuffer + row * m_Pitch; 1267 FX_LPBYTE scanline = m_pBuffer + row * m_Pitch;
1268 for (int col = 0; col < m_Width; col ++) { 1268 for (int col = 0; col < m_Width; col ++) {
1269 FX_BYTE b, g, r; 1269 uint8_t b, g, r;
1270 AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], sc anline[3], 1270 AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], sc anline[3],
1271 r, g, b); 1271 r, g, b);
1272 *scanline ++ = 0; 1272 *scanline ++ = 0;
1273 *scanline ++ = 0; 1273 *scanline ++ = 0;
1274 *scanline ++ = 0; 1274 *scanline ++ = 0;
1275 *scanline ++ = 255 - FXRGB2GRAY(r, g, b); 1275 *scanline ++ = 255 - FXRGB2GRAY(r, g, b);
1276 } 1276 }
1277 } 1277 }
1278 return TRUE; 1278 return TRUE;
1279 } 1279 }
1280 } else if (forecolor == 0 && backcolor == 0xffffff) { 1280 } else if (forecolor == 0 && backcolor == 0xffffff) {
1281 for (int row = 0; row < m_Height; row ++) { 1281 for (int row = 0; row < m_Height; row ++) {
1282 FX_LPBYTE scanline = m_pBuffer + row * m_Pitch; 1282 FX_LPBYTE scanline = m_pBuffer + row * m_Pitch;
1283 int gap = m_bpp / 8 - 2; 1283 int gap = m_bpp / 8 - 2;
1284 for (int col = 0; col < m_Width; col ++) { 1284 for (int col = 0; col < m_Width; col ++) {
1285 int gray = FXRGB2GRAY(scanline[2], scanline[1], scanline[0]); 1285 int gray = FXRGB2GRAY(scanline[2], scanline[1], scanline[0]);
1286 *scanline ++ = gray; 1286 *scanline ++ = gray;
1287 *scanline ++ = gray; 1287 *scanline ++ = gray;
1288 *scanline = gray; 1288 *scanline = gray;
1289 scanline += gap; 1289 scanline += gap;
1290 } 1290 }
1291 } 1291 }
1292 return TRUE; 1292 return TRUE;
1293 } 1293 }
1294 if (isCmykImage) { 1294 if (isCmykImage) {
1295 for (int row = 0; row < m_Height; row ++) { 1295 for (int row = 0; row < m_Height; row ++) {
1296 FX_LPBYTE scanline = m_pBuffer + row * m_Pitch; 1296 FX_LPBYTE scanline = m_pBuffer + row * m_Pitch;
1297 for (int col = 0; col < m_Width; col ++) { 1297 for (int col = 0; col < m_Width; col ++) {
1298 FX_BYTE b, g, r; 1298 uint8_t b, g, r;
1299 AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], scanli ne[3], 1299 AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], scanli ne[3],
1300 r, g, b); 1300 r, g, b);
1301 int gray = 255 - FXRGB2GRAY(r, g, b); 1301 int gray = 255 - FXRGB2GRAY(r, g, b);
1302 *scanline ++ = bc + (fc - bc) * gray / 255; 1302 *scanline ++ = bc + (fc - bc) * gray / 255;
1303 *scanline ++ = bm + (fm - bm) * gray / 255; 1303 *scanline ++ = bm + (fm - bm) * gray / 255;
1304 *scanline ++ = by + (fy - by) * gray / 255; 1304 *scanline ++ = by + (fy - by) * gray / 255;
1305 *scanline ++ = bk + (fk - bk) * gray / 255; 1305 *scanline ++ = bk + (fk - bk) * gray / 255;
1306 } 1306 }
1307 } 1307 }
1308 } else { 1308 } else {
(...skipping 19 matching lines...) Expand all
1328 if (m_bpp != 8 && m_pPalette != NULL && m_AlphaFlag != 0) { 1328 if (m_bpp != 8 && m_pPalette != NULL && m_AlphaFlag != 0) {
1329 return FALSE; 1329 return FALSE;
1330 } 1330 }
1331 if (m_Width < 4 && m_Height < 4) { 1331 if (m_Width < 4 && m_Height < 4) {
1332 return FALSE; 1332 return FALSE;
1333 } 1333 }
1334 FX_RECT rect(0, 0, m_Width, m_Height); 1334 FX_RECT rect(0, 0, m_Width, m_Height);
1335 if (pRect) { 1335 if (pRect) {
1336 rect.Intersect(*pRect); 1336 rect.Intersect(*pRect);
1337 } 1337 }
1338 FX_BYTE translate[256]; 1338 uint8_t translate[256];
1339 for (int i = 0; i < 256; i ++) { 1339 for (int i = 0; i < 256; i ++) {
1340 int err2 = 65536; 1340 int err2 = 65536;
1341 for (int j = 0; j < pal_size; j ++) { 1341 for (int j = 0; j < pal_size; j ++) {
1342 FX_BYTE entry = (FX_BYTE)pPalette[j]; 1342 uint8_t entry = (uint8_t)pPalette[j];
1343 int err = (int)entry - i; 1343 int err = (int)entry - i;
1344 if (err * err < err2) { 1344 if (err * err < err2) {
1345 err2 = err * err; 1345 err2 = err * err;
1346 translate[i] = entry; 1346 translate[i] = entry;
1347 } 1347 }
1348 } 1348 }
1349 } 1349 }
1350 for (int row = rect.top; row < rect.bottom; row ++) { 1350 for (int row = rect.top; row < rect.bottom; row ++) {
1351 FX_LPBYTE scan = m_pBuffer + row * m_Pitch; 1351 FX_LPBYTE scan = m_pBuffer + row * m_Pitch;
1352 FX_LPBYTE next_scan = m_pBuffer + (row + 1) * m_Pitch; 1352 FX_LPBYTE next_scan = m_pBuffer + (row + 1) * m_Pitch;
1353 for (int col = rect.left; col < rect.right; col ++) { 1353 for (int col = rect.left; col < rect.right; col ++) {
1354 int src_pixel = scan[col]; 1354 int src_pixel = scan[col];
1355 int dest_pixel = translate[src_pixel]; 1355 int dest_pixel = translate[src_pixel];
1356 scan[col] = (FX_BYTE)dest_pixel; 1356 scan[col] = (uint8_t)dest_pixel;
1357 int error = -dest_pixel + src_pixel; 1357 int error = -dest_pixel + src_pixel;
1358 if (col < rect.right - 1) { 1358 if (col < rect.right - 1) {
1359 int src = scan[col + 1]; 1359 int src = scan[col + 1];
1360 src += error * 7 / 16; 1360 src += error * 7 / 16;
1361 if (src > 255) { 1361 if (src > 255) {
1362 scan[col + 1] = 255; 1362 scan[col + 1] = 255;
1363 } else if (src < 0) { 1363 } else if (src < 0) {
1364 scan[col + 1] = 0; 1364 scan[col + 1] = 0;
1365 } else { 1365 } else {
1366 scan[col + 1] = src; 1366 scan[col + 1] = src;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 FX_Free(m_pScanline); 1515 FX_Free(m_pScanline);
1516 } 1516 }
1517 } 1517 }
1518 void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc) 1518 void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc)
1519 { 1519 {
1520 m_pSrc = pSrc; 1520 m_pSrc = pSrc;
1521 m_bAutoDropSrc = bAutoDropSrc; 1521 m_bAutoDropSrc = bAutoDropSrc;
1522 m_Width = pSrc->GetWidth(); 1522 m_Width = pSrc->GetWidth();
1523 m_Height = pSrc->GetHeight(); 1523 m_Height = pSrc->GetHeight();
1524 FXDIB_Format format = GetDestFormat(); 1524 FXDIB_Format format = GetDestFormat();
1525 m_bpp = (FX_BYTE)format; 1525 m_bpp = (uint8_t)format;
1526 m_AlphaFlag = (FX_BYTE)(format >> 8); 1526 m_AlphaFlag = (uint8_t)(format >> 8);
1527 m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4; 1527 m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4;
1528 m_pPalette = GetDestPalette(); 1528 m_pPalette = GetDestPalette();
1529 m_pScanline = FX_Alloc(FX_BYTE, m_Pitch); 1529 m_pScanline = FX_Alloc(uint8_t, m_Pitch);
1530 } 1530 }
1531 FX_LPCBYTE CFX_FilteredDIB::GetScanline(int line) const 1531 FX_LPCBYTE CFX_FilteredDIB::GetScanline(int line) const
1532 { 1532 {
1533 TranslateScanline(m_pScanline, m_pSrc->GetScanline(line)); 1533 TranslateScanline(m_pScanline, m_pSrc->GetScanline(line));
1534 return m_pScanline; 1534 return m_pScanline;
1535 } 1535 }
1536 void CFX_FilteredDIB::DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest _bpp, 1536 void CFX_FilteredDIB::DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest _bpp,
1537 int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const 1537 int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const
1538 { 1538 {
1539 m_pSrc->DownSampleScanline(line, dest_scan, dest_bpp, dest_width, bFlipX, cl ip_left, clip_width); 1539 m_pSrc->DownSampleScanline(line, dest_scan, dest_bpp, dest_width, bFlipX, cl ip_left, clip_width);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 if (pBitmap == NULL) { 1634 if (pBitmap == NULL) {
1635 return FALSE; 1635 return FALSE;
1636 } 1636 }
1637 if (pBitmap->GetBuffer() == NULL) { 1637 if (pBitmap->GetBuffer() == NULL) {
1638 delete pBitmap; 1638 delete pBitmap;
1639 return FALSE; 1639 return FALSE;
1640 } 1640 }
1641 if (pBitmap->IsAlphaMask()) { 1641 if (pBitmap->IsAlphaMask()) {
1642 if (m_BitmapAlpha != 255) { 1642 if (m_BitmapAlpha != 255) {
1643 if (m_AlphaFlag >> 8) { 1643 if (m_AlphaFlag >> 8) {
1644 m_AlphaFlag = (((FX_BYTE)((m_AlphaFlag & 0xff) * m_BitmapAlp ha / 255)) | ((m_AlphaFlag >> 8) << 8)); 1644 m_AlphaFlag = (((uint8_t)((m_AlphaFlag & 0xff) * m_BitmapAlp ha / 255)) | ((m_AlphaFlag >> 8) << 8));
1645 } else { 1645 } else {
1646 m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha); 1646 m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha);
1647 } 1647 }
1648 } 1648 }
1649 m_pDevice->CompositeMask(m_pTransformer->m_ResultLeft, m_pTransforme r->m_ResultTop, 1649 m_pDevice->CompositeMask(m_pTransformer->m_ResultLeft, m_pTransforme r->m_ResultTop,
1650 pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, m_MaskColor, 1650 pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, m_MaskColor,
1651 0, 0, m_BlendType, m_pClipRgn, m_bRgbByteOr der, m_AlphaFlag, m_pIccTransform); 1651 0, 0, m_BlendType, m_pClipRgn, m_bRgbByteOr der, m_AlphaFlag, m_pIccTransform);
1652 } else { 1652 } else {
1653 if (m_BitmapAlpha != 255) { 1653 if (m_BitmapAlpha != 255) {
1654 pBitmap->MultiplyAlpha(m_BitmapAlpha); 1654 pBitmap->MultiplyAlpha(m_BitmapAlpha);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 if (!m_pBitmap->Create(width, height, src_format)) { 1705 if (!m_pBitmap->Create(width, height, src_format)) {
1706 delete m_pBitmap; 1706 delete m_pBitmap;
1707 m_pBitmap = NULL; 1707 m_pBitmap = NULL;
1708 return FALSE; 1708 return FALSE;
1709 } 1709 }
1710 if (pSrcPalette) { 1710 if (pSrcPalette) {
1711 m_pBitmap->CopyPalette(pSrcPalette); 1711 m_pBitmap->CopyPalette(pSrcPalette);
1712 } 1712 }
1713 return TRUE; 1713 return TRUE;
1714 } 1714 }
OLDNEW
« no previous file with comments | « core/src/fxge/dib/fx_dib_engine.cpp ('k') | core/src/fxge/dib/fx_dib_transform.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698