| 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 |