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

Side by Side Diff: core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp

Issue 508253003: Use valid bpc value in LoadPalette() and ContinueToLoadMask() (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 6 years, 3 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 | « no previous file | no next file » | 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_ge.h" 7 #include "../../../include/fxge/fx_ge.h"
8 #include "../../../include/fxcodec/fx_codec.h" 8 #include "../../../include/fxcodec/fx_codec.h"
9 #include "../../../include/fpdfapi/fpdf_module.h" 9 #include "../../../include/fpdfapi/fpdf_module.h"
10 #include "../../../include/fpdfapi/fpdf_render.h" 10 #include "../../../include/fpdfapi/fpdf_render.h"
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 if (ppMask) { 246 if (ppMask) {
247 *ppMask = LoadMask(*pMatteColor); 247 *ppMask = LoadMask(*pMatteColor);
248 } 248 }
249 if (m_pColorSpace && bStdCS) { 249 if (m_pColorSpace && bStdCS) {
250 m_pColorSpace->EnableStdConversion(FALSE); 250 m_pColorSpace->EnableStdConversion(FALSE);
251 } 251 }
252 return TRUE; 252 return TRUE;
253 } 253 }
254 int CPDF_DIBSource::ContinueToLoadMask() 254 int CPDF_DIBSource::ContinueToLoadMask()
255 { 255 {
256 FX_DWORD bpc = GetValidBpc();
256 if (m_bImageMask) { 257 if (m_bImageMask) {
257 m_bpp = 1; 258 m_bpp = 1;
258 m_bpc = 1; 259 bpc = 1;
259 m_nComponents = 1; 260 m_nComponents = 1;
260 m_AlphaFlag = 1; 261 m_AlphaFlag = 1;
261 } else if (m_bpc * m_nComponents == 1) { 262 } else if (bpc * m_nComponents == 1) {
262 m_bpp = 1; 263 m_bpp = 1;
263 } else if (m_bpc * m_nComponents <= 8) { 264 } else if (bpc * m_nComponents <= 8) {
264 m_bpp = 8; 265 m_bpp = 8;
265 } else { 266 } else {
266 m_bpp = 24; 267 m_bpp = 24;
267 } 268 }
268 if (!m_bpc || !m_nComponents) { 269 if (!bpc || !m_nComponents) {
269 return 0; 270 return 0;
270 } 271 }
271 FX_SAFE_DWORD pitch = m_Width; 272 FX_SAFE_DWORD pitch = m_Width;
272 pitch *= m_bpp; 273 pitch *= m_bpp;
273 pitch += 31; 274 pitch += 31;
274 pitch /= 8; 275 pitch /= 8;
275 if (!pitch.IsValid()) { 276 if (!pitch.IsValid()) {
276 return 0; 277 return 0;
277 } 278 }
278 m_pLineBuf = FX_Alloc(FX_BYTE, pitch.ValueOrDie()); 279 m_pLineBuf = FX_Alloc(FX_BYTE, pitch.ValueOrDie());
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 } 848 }
848 if (!ret) { 849 if (!ret) {
849 delete m_pMask; 850 delete m_pMask;
850 m_pMask = NULL; 851 m_pMask = NULL;
851 return 1; 852 return 1;
852 } 853 }
853 return 1; 854 return 1;
854 } 855 }
855 void CPDF_DIBSource::LoadPalette() 856 void CPDF_DIBSource::LoadPalette()
856 { 857 {
857 if (m_bpc * m_nComponents > 8) { 858 FX_DWORD bpc = GetValidBpc();
859 if (bpc == 0) {
860 return;
861 }
862 if (bpc * m_nComponents > 8) {
858 return; 863 return;
859 } 864 }
860 if (m_pColorSpace == NULL) { 865 if (m_pColorSpace == NULL) {
861 return; 866 return;
862 } 867 }
863 if (m_bpc * m_nComponents == 1) { 868 if (bpc * m_nComponents == 1) {
864 if (m_bDefaultDecode && (m_Family == PDFCS_DEVICEGRAY || m_Family == PDF CS_DEVICERGB)) { 869 if (m_bDefaultDecode && (m_Family == PDFCS_DEVICEGRAY || m_Family == PDF CS_DEVICERGB)) {
865 return; 870 return;
866 } 871 }
867 if (m_pColorSpace->CountComponents() > 3) { 872 if (m_pColorSpace->CountComponents() > 3) {
868 return; 873 return;
869 } 874 }
870 FX_FLOAT color_values[3]; 875 FX_FLOAT color_values[3];
871 color_values[0] = m_pCompData[0].m_DecodeMin; 876 color_values[0] = m_pCompData[0].m_DecodeMin;
872 color_values[1] = color_values[2] = color_values[0]; 877 color_values[1] = color_values[2] = color_values[0];
873 FX_FLOAT R=0.0f, G=0.0f, B=0.0f; 878 FX_FLOAT R=0.0f, G=0.0f, B=0.0f;
874 m_pColorSpace->GetRGB(color_values, R, G, B); 879 m_pColorSpace->GetRGB(color_values, R, G, B);
875 FX_ARGB argb0 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 25 5), FXSYS_round(B * 255)); 880 FX_ARGB argb0 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 25 5), FXSYS_round(B * 255));
876 color_values[0] += m_pCompData[0].m_DecodeStep; 881 color_values[0] += m_pCompData[0].m_DecodeStep;
877 color_values[1] += m_pCompData[0].m_DecodeStep; 882 color_values[1] += m_pCompData[0].m_DecodeStep;
878 color_values[2] += m_pCompData[0].m_DecodeStep; 883 color_values[2] += m_pCompData[0].m_DecodeStep;
879 m_pColorSpace->GetRGB(color_values, R, G, B); 884 m_pColorSpace->GetRGB(color_values, R, G, B);
880 FX_ARGB argb1 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 25 5), FXSYS_round(B * 255)); 885 FX_ARGB argb1 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 25 5), FXSYS_round(B * 255));
881 if (argb0 != 0xFF000000 || argb1 != 0xFFFFFFFF) { 886 if (argb0 != 0xFF000000 || argb1 != 0xFFFFFFFF) {
882 SetPaletteArgb(0, argb0); 887 SetPaletteArgb(0, argb0);
883 SetPaletteArgb(1, argb1); 888 SetPaletteArgb(1, argb1);
884 } 889 }
885 return; 890 return;
886 } 891 }
887 if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && m_bpc == 8 && m_bDefaultDecode) { 892 if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && bpc == 8 && m_bDefaultDecode) {
888 } else { 893 } else {
889 int palette_count = 1 << (m_bpc * m_nComponents); 894 int palette_count = 1 << (bpc * m_nComponents);
890 CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents); 895 CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents);
891 FX_FLOAT* color_value = color_values; 896 FX_FLOAT* color_value = color_values;
892 for (int i = 0; i < palette_count; i ++) { 897 for (int i = 0; i < palette_count; i ++) {
893 int color_data = i; 898 int color_data = i;
894 for (FX_DWORD j = 0; j < m_nComponents; j ++) { 899 for (FX_DWORD j = 0; j < m_nComponents; j ++) {
895 int encoded_component = color_data % (1 << m_bpc); 900 int encoded_component = color_data % (1 << bpc);
896 color_data /= 1 << m_bpc; 901 color_data /= 1 << bpc;
897 color_value[j] = m_pCompData[j].m_DecodeMin + m_pCompData[j].m_D ecodeStep * encoded_component; 902 color_value[j] = m_pCompData[j].m_DecodeMin + m_pCompData[j].m_D ecodeStep * encoded_component;
898 } 903 }
899 FX_FLOAT R = 0, G = 0, B = 0; 904 FX_FLOAT R = 0, G = 0, B = 0;
900 if (m_nComponents == 1 && m_Family == PDFCS_ICCBASED && m_pColorSpac e->CountComponents() > 1) { 905 if (m_nComponents == 1 && m_Family == PDFCS_ICCBASED && m_pColorSpac e->CountComponents() > 1) {
901 int nComponents = m_pColorSpace->CountComponents(); 906 int nComponents = m_pColorSpace->CountComponents();
902 FX_FLOAT* temp_buf = FX_Alloc(FX_FLOAT, nComponents); 907 FX_FLOAT* temp_buf = FX_Alloc(FX_FLOAT, nComponents);
903 for (int i = 0; i < nComponents; i++) { 908 for (int i = 0; i < nComponents; i++) {
904 temp_buf[i] = *color_value; 909 temp_buf[i] = *color_value;
905 } 910 }
906 m_pColorSpace->GetRGB(temp_buf, R, G, B); 911 m_pColorSpace->GetRGB(temp_buf, R, G, B);
(...skipping 23 matching lines...) Expand all
930 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("CCITTFacD ecode") || 935 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("CCITTFacD ecode") ||
931 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JBIG2 Decode")) { 936 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JBIG2 Decode")) {
932 bpc = 1; 937 bpc = 1;
933 } 938 }
934 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("RunLength Decode") || 939 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("RunLength Decode") ||
935 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("DCTDe code")) { 940 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("DCTDe code")) {
936 bpc = 8; 941 bpc = 8;
937 } 942 }
938 } 943 }
939 } 944 }
940 if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 12 && bpc != 16) { 945 if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 16) {
941 bpc = 0; 946 bpc = 0;
942 } 947 }
943 948
944 return bpc; 949 return bpc;
945 } 950 }
946 #define NORMALCOLOR_MAX(color, max) (color) > (max) ? (max) : (color) < 0 ? 0 : (color); 951 #define NORMALCOLOR_MAX(color, max) (color) > (max) ? (max) : (color) < 0 ? 0 : (color);
947 void CPDF_DIBSource::TranslateScanline24bpp(FX_LPBYTE dest_scan, FX_LPCBYTE src_ scan) const 952 void CPDF_DIBSource::TranslateScanline24bpp(FX_LPBYTE dest_scan, FX_LPCBYTE src_ scan) const
948 { 953 {
949 FX_DWORD bpc = GetValidBpc(); 954 FX_DWORD bpc = GetValidBpc();
950 if (bpc == 0) { 955 if (bpc == 0) {
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1555 if (!m_bCached) { 1560 if (!m_bCached) {
1556 if (m_pBitmap) { 1561 if (m_pBitmap) {
1557 delete m_pBitmap; 1562 delete m_pBitmap;
1558 m_pBitmap = NULL; 1563 m_pBitmap = NULL;
1559 } 1564 }
1560 if (m_pMask) { 1565 if (m_pMask) {
1561 delete m_pMask; 1566 delete m_pMask;
1562 } 1567 }
1563 } 1568 }
1564 } 1569 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698