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(); |
Tom Sepez
2014/08/27 20:26:49
Do we want to return early if this is 0?
Bo Xu
2014/08/27 20:37:24
Right! Done. There are a few other instances of no
| |
859 if (bpc * m_nComponents > 8) { | |
858 return; | 860 return; |
859 } | 861 } |
860 if (m_pColorSpace == NULL) { | 862 if (m_pColorSpace == NULL) { |
861 return; | 863 return; |
862 } | 864 } |
863 if (m_bpc * m_nComponents == 1) { | 865 if (bpc * m_nComponents == 1) { |
864 if (m_bDefaultDecode && (m_Family == PDFCS_DEVICEGRAY || m_Family == PDF CS_DEVICERGB)) { | 866 if (m_bDefaultDecode && (m_Family == PDFCS_DEVICEGRAY || m_Family == PDF CS_DEVICERGB)) { |
865 return; | 867 return; |
866 } | 868 } |
867 if (m_pColorSpace->CountComponents() > 3) { | 869 if (m_pColorSpace->CountComponents() > 3) { |
868 return; | 870 return; |
869 } | 871 } |
870 FX_FLOAT color_values[3]; | 872 FX_FLOAT color_values[3]; |
871 color_values[0] = m_pCompData[0].m_DecodeMin; | 873 color_values[0] = m_pCompData[0].m_DecodeMin; |
872 color_values[1] = color_values[2] = color_values[0]; | 874 color_values[1] = color_values[2] = color_values[0]; |
873 FX_FLOAT R=0.0f, G=0.0f, B=0.0f; | 875 FX_FLOAT R=0.0f, G=0.0f, B=0.0f; |
874 m_pColorSpace->GetRGB(color_values, R, G, B); | 876 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)); | 877 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; | 878 color_values[0] += m_pCompData[0].m_DecodeStep; |
877 color_values[1] += m_pCompData[0].m_DecodeStep; | 879 color_values[1] += m_pCompData[0].m_DecodeStep; |
878 color_values[2] += m_pCompData[0].m_DecodeStep; | 880 color_values[2] += m_pCompData[0].m_DecodeStep; |
879 m_pColorSpace->GetRGB(color_values, R, G, B); | 881 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)); | 882 FX_ARGB argb1 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 25 5), FXSYS_round(B * 255)); |
881 if (argb0 != 0xFF000000 || argb1 != 0xFFFFFFFF) { | 883 if (argb0 != 0xFF000000 || argb1 != 0xFFFFFFFF) { |
882 SetPaletteArgb(0, argb0); | 884 SetPaletteArgb(0, argb0); |
883 SetPaletteArgb(1, argb1); | 885 SetPaletteArgb(1, argb1); |
884 } | 886 } |
885 return; | 887 return; |
886 } | 888 } |
887 if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && m_bpc == 8 && m_bDefaultDecode) { | 889 if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && bpc == 8 && m_bDefaultDecode) { |
888 } else { | 890 } else { |
889 int palette_count = 1 << (m_bpc * m_nComponents); | 891 int palette_count = 1 << (bpc * m_nComponents); |
890 CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents); | 892 CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents); |
891 FX_FLOAT* color_value = color_values; | 893 FX_FLOAT* color_value = color_values; |
892 for (int i = 0; i < palette_count; i ++) { | 894 for (int i = 0; i < palette_count; i ++) { |
893 int color_data = i; | 895 int color_data = i; |
894 for (FX_DWORD j = 0; j < m_nComponents; j ++) { | 896 for (FX_DWORD j = 0; j < m_nComponents; j ++) { |
895 int encoded_component = color_data % (1 << m_bpc); | 897 int encoded_component = color_data % (1 << bpc); |
896 color_data /= 1 << m_bpc; | 898 color_data /= 1 << bpc; |
897 color_value[j] = m_pCompData[j].m_DecodeMin + m_pCompData[j].m_D ecodeStep * encoded_component; | 899 color_value[j] = m_pCompData[j].m_DecodeMin + m_pCompData[j].m_D ecodeStep * encoded_component; |
898 } | 900 } |
899 FX_FLOAT R = 0, G = 0, B = 0; | 901 FX_FLOAT R = 0, G = 0, B = 0; |
900 if (m_nComponents == 1 && m_Family == PDFCS_ICCBASED && m_pColorSpac e->CountComponents() > 1) { | 902 if (m_nComponents == 1 && m_Family == PDFCS_ICCBASED && m_pColorSpac e->CountComponents() > 1) { |
901 int nComponents = m_pColorSpace->CountComponents(); | 903 int nComponents = m_pColorSpace->CountComponents(); |
902 FX_FLOAT* temp_buf = FX_Alloc(FX_FLOAT, nComponents); | 904 FX_FLOAT* temp_buf = FX_Alloc(FX_FLOAT, nComponents); |
903 for (int i = 0; i < nComponents; i++) { | 905 for (int i = 0; i < nComponents; i++) { |
904 temp_buf[i] = *color_value; | 906 temp_buf[i] = *color_value; |
905 } | 907 } |
906 m_pColorSpace->GetRGB(temp_buf, R, G, B); | 908 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") || | 932 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("CCITTFacD ecode") || |
931 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JBIG2 Decode")) { | 933 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JBIG2 Decode")) { |
932 bpc = 1; | 934 bpc = 1; |
933 } | 935 } |
934 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("RunLength Decode") || | 936 if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("RunLength Decode") || |
935 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("DCTDe code")) { | 937 pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("DCTDe code")) { |
936 bpc = 8; | 938 bpc = 8; |
937 } | 939 } |
938 } | 940 } |
939 } | 941 } |
940 if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 12 && bpc != 16) { | 942 if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 16) { |
941 bpc = 0; | 943 bpc = 0; |
942 } | 944 } |
943 | 945 |
944 return bpc; | 946 return bpc; |
945 } | 947 } |
946 #define NORMALCOLOR_MAX(color, max) (color) > (max) ? (max) : (color) < 0 ? 0 : (color); | 948 #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 | 949 void CPDF_DIBSource::TranslateScanline24bpp(FX_LPBYTE dest_scan, FX_LPCBYTE src_ scan) const |
948 { | 950 { |
949 FX_DWORD bpc = GetValidBpc(); | 951 FX_DWORD bpc = GetValidBpc(); |
950 if (bpc == 0) { | 952 if (bpc == 0) { |
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1555 if (!m_bCached) { | 1557 if (!m_bCached) { |
1556 if (m_pBitmap) { | 1558 if (m_pBitmap) { |
1557 delete m_pBitmap; | 1559 delete m_pBitmap; |
1558 m_pBitmap = NULL; | 1560 m_pBitmap = NULL; |
1559 } | 1561 } |
1560 if (m_pMask) { | 1562 if (m_pMask) { |
1561 delete m_pMask; | 1563 delete m_pMask; |
1562 } | 1564 } |
1563 } | 1565 } |
1564 } | 1566 } |
OLD | NEW |