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 #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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |