diff options
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp | 179 | ||||
-rw-r--r-- | core/src/fpdfapi/fpdf_render/render_int.h | 23 |
2 files changed, 1 insertions, 201 deletions
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp index 9c7b0018fa..a9544d3c1b 100644 --- a/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp +++ b/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp @@ -291,24 +291,11 @@ void CPDF_DIBTransferFunc::TranslateDownSamples(uint8_t* dest_buf, } } } -static FX_BOOL _IsSupported(CPDF_ColorSpace* pCS) { - if (pCS->GetFamily() == PDFCS_DEVICERGB || - pCS->GetFamily() == PDFCS_DEVICEGRAY || - pCS->GetFamily() == PDFCS_DEVICECMYK || - pCS->GetFamily() == PDFCS_CALGRAY || pCS->GetFamily() == PDFCS_CALRGB) { - return TRUE; - } - if (pCS->GetFamily() == PDFCS_INDEXED && _IsSupported(pCS->GetBaseCS())) { - return TRUE; - } - return FALSE; -} CPDF_ImageRenderer::CPDF_ImageRenderer() { m_pRenderStatus = NULL; m_pImageObject = NULL; m_Result = TRUE; m_Status = 0; - m_pQuickStretcher = NULL; m_pTransformer = NULL; m_DeviceHandle = NULL; m_LoadHandle = NULL; @@ -320,7 +307,6 @@ CPDF_ImageRenderer::CPDF_ImageRenderer() { m_pObj2Device = NULL; } CPDF_ImageRenderer::~CPDF_ImageRenderer() { - delete m_pQuickStretcher; delete m_pTransformer; if (m_DeviceHandle) { m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle); @@ -825,20 +811,6 @@ FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() { return FALSE; } FX_BOOL CPDF_ImageRenderer::Continue(IFX_Pause* pPause) { - if (m_Status == 1) { - if (m_pQuickStretcher->Continue(pPause)) { - return TRUE; - } - if (m_pQuickStretcher->m_pBitmap->IsAlphaMask()) - m_pRenderStatus->m_pDevice->SetBitMask( - m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft, - m_pQuickStretcher->m_ResultTop, m_FillArgb); - else - m_pRenderStatus->m_pDevice->SetDIBits( - m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft, - m_pQuickStretcher->m_ResultTop, m_BlendType); - return FALSE; - } if (m_Status == 2) { if (m_pTransformer->Continue(pPause)) { return TRUE; @@ -878,18 +850,6 @@ FX_BOOL CPDF_ImageRenderer::Continue(IFX_Pause* pPause) { } return FALSE; } -CPDF_QuickStretcher::CPDF_QuickStretcher() { - m_pBitmap = NULL; - m_pDecoder = NULL; - m_pCS = NULL; -} -CPDF_QuickStretcher::~CPDF_QuickStretcher() { - delete m_pBitmap; - if (m_pCS) { - m_pCS->ReleaseCS(); - } - delete m_pDecoder; -} ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder( const uint8_t* src_buf, FX_DWORD src_size, @@ -898,145 +858,6 @@ ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder( int nComps, int bpc, const CPDF_Dictionary* pParams); -FX_BOOL CPDF_QuickStretcher::Start(CPDF_ImageObject* pImageObj, - CFX_Matrix* pImage2Device, - const FX_RECT* pClipBox) { - if (FXSYS_fabs(pImage2Device->a) < FXSYS_fabs(pImage2Device->b) * 10 && - FXSYS_fabs(pImage2Device->d) < FXSYS_fabs(pImage2Device->c) * 10) { - return FALSE; - } - CFX_FloatRect image_rect_f = pImage2Device->GetUnitRect(); - FX_RECT image_rect = image_rect_f.GetOutterRect(); - m_DestWidth = image_rect.Width(); - m_DestHeight = image_rect.Height(); - m_bFlipX = pImage2Device->a < 0; - m_bFlipY = pImage2Device->d > 0; - FX_RECT result_rect = *pClipBox; - result_rect.Intersect(image_rect); - if (result_rect.IsEmpty()) { - return FALSE; - } - m_ResultWidth = result_rect.Width(); - m_ResultHeight = result_rect.Height(); - m_ResultLeft = result_rect.left; - m_ResultTop = result_rect.top; - m_ClipLeft = result_rect.left - image_rect.left; - m_ClipTop = result_rect.top - image_rect.top; - CPDF_Dictionary* pDict = pImageObj->m_pImage->GetDict(); - if (pDict->GetInteger("BitsPerComponent") != 8) { - return FALSE; - } - if (pDict->KeyExist("SMask") || pDict->KeyExist("Mask")) { - return FALSE; - } - m_SrcWidth = pDict->GetInteger("Width"); - m_SrcHeight = pDict->GetInteger("Height"); - m_pCS = NULL; - m_Bpp = 3; - CPDF_Object* pCSObj = pDict->GetElementValue("ColorSpace"); - if (!pCSObj) { - return FALSE; - } - m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj); - if (!m_pCS) { - return FALSE; - } - if (!_IsSupported(m_pCS)) { - return FALSE; - } - m_Bpp = m_pCS->CountComponents(); - if (m_pCS->sRGB()) { - m_pCS->ReleaseCS(); - m_pCS = NULL; - } - CPDF_Stream* pStream = pImageObj->m_pImage->GetStream(); - m_StreamAcc.LoadAllData(pStream, FALSE, m_SrcWidth * m_SrcHeight * m_Bpp, - TRUE); - m_pDecoder = NULL; - if (!m_StreamAcc.GetImageDecoder().IsEmpty()) { - if (m_StreamAcc.GetImageDecoder() == "DCTDecode") { - const CPDF_Dictionary* pParam = m_StreamAcc.GetImageParam(); - m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder( - m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_SrcWidth, m_SrcHeight, - m_Bpp, pParam ? pParam->GetInteger("ColorTransform", 1) : 1); - } else if (m_StreamAcc.GetImageDecoder() == "FlateDecode") { - m_pDecoder = FPDFAPI_CreateFlateDecoder( - m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_SrcWidth, m_SrcHeight, - m_Bpp, 8, m_StreamAcc.GetImageParam()); - } else { - return FALSE; - } - m_pDecoder->DownScale(m_DestWidth, m_DestHeight); - } - m_pBitmap = new CFX_DIBitmap; -#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb32); -#else - m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb); -#endif - m_LineIndex = 0; - return TRUE; -} -FX_BOOL CPDF_QuickStretcher::Continue(IFX_Pause* pPause) { - uint8_t* result_buf = m_pBitmap->GetBuffer(); - int src_width = m_pDecoder ? m_pDecoder->GetWidth() : m_SrcWidth; - int src_height = m_pDecoder ? m_pDecoder->GetHeight() : m_SrcHeight; - int src_pitch = src_width * m_Bpp; - while (m_LineIndex < m_ResultHeight) { - int dest_y, src_y; - if (m_bFlipY) { - dest_y = m_ResultHeight - m_LineIndex - 1; - src_y = - (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_DestHeight; - } else { - dest_y = m_LineIndex; - src_y = (dest_y + m_ClipTop) * src_height / m_DestHeight; - } - const uint8_t* src_scan; - if (m_pDecoder) { - src_scan = m_pDecoder->GetScanline(src_y); - if (!src_scan) { - break; - } - } else { - src_scan = m_StreamAcc.GetData(); - if (!src_scan) { - break; - } - src_scan += src_y * src_pitch; - } - uint8_t* result_scan = result_buf + dest_y * m_pBitmap->GetPitch(); - for (int x = 0; x < m_ResultWidth; x++) { - int dest_x = m_ClipLeft + x; - int src_x = (m_bFlipX ? (m_DestWidth - dest_x - 1) : dest_x) * src_width / - m_DestWidth; - const uint8_t* src_pixel = src_scan + src_x * m_Bpp; - if (!m_pCS) { - *result_scan = src_pixel[2]; - result_scan++; - *result_scan = src_pixel[1]; - result_scan++; - *result_scan = src_pixel[0]; - result_scan++; -#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - result_scan++; -#endif - } else { - m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0); -#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - result_scan += 4; -#else - result_scan += 3; -#endif - } - } - m_LineIndex++; - if (pPause && pPause->NeedToPauseNow()) { - return TRUE; - } - } - return FALSE; -} CFX_DIBitmap* CPDF_RenderStatus::LoadSMask(CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_Matrix* pMatrix) { diff --git a/core/src/fpdfapi/fpdf_render/render_int.h b/core/src/fpdfapi/fpdf_render/render_int.h index 26bef8ba42..c4bfa28ff7 100644 --- a/core/src/fpdfapi/fpdf_render/render_int.h +++ b/core/src/fpdfapi/fpdf_render/render_int.h @@ -15,7 +15,7 @@ class CFX_GlyphBitmap; class CPDF_ImageCache; -class CPDF_QuickStretcher; +class ICodec_ScanlineDecoder; #define TYPE3_MAX_BLUES 16 @@ -363,7 +363,6 @@ class CPDF_ImageRenderer : public IPDF_ObjectRenderer { CPDF_Pattern* m_pPattern; FX_ARGB m_FillArgb; FX_DWORD m_Flags; - CPDF_QuickStretcher* m_pQuickStretcher; CFX_ImageTransformer* m_pTransformer; void* m_DeviceHandle; void* m_LoadHandle; @@ -403,26 +402,6 @@ class CPDF_ScaledRenderBuffer { CFX_Matrix m_Matrix; }; -class ICodec_ScanlineDecoder; -class CPDF_QuickStretcher { - public: - CPDF_QuickStretcher(); - ~CPDF_QuickStretcher(); - FX_BOOL Start(CPDF_ImageObject* pImageObj, - CFX_Matrix* pImage2Device, - const FX_RECT* pClipBox); - FX_BOOL Continue(IFX_Pause* pPause); - CFX_DIBitmap* m_pBitmap; - int m_ResultLeft, m_ResultTop, m_ClipLeft, m_ClipTop; - int m_DestWidth, m_DestHeight, m_ResultWidth, m_ResultHeight; - int m_Bpp, m_SrcWidth, m_SrcHeight; - FX_BOOL m_bFlipX, m_bFlipY; - CPDF_ColorSpace* m_pCS; - ICodec_ScanlineDecoder* m_pDecoder; - CPDF_StreamAcc m_StreamAcc; - int m_LineIndex; -}; - class CPDF_DeviceBuffer { public: CPDF_DeviceBuffer(); |