| // Copyright 2014 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #ifndef CORE_FXGE_DIB_DIB_INT_H_ |
| #define CORE_FXGE_DIB_DIB_INT_H_ |
| |
| #include <stdint.h> |
| |
| #include "core/fxcrt/fx_coordinates.h" |
| #include "core/fxge/fx_dib.h" |
| |
| class IFX_ScanlineComposer; |
| |
| extern const int16_t SDP_Table[513]; |
| |
| class CPDF_FixedMatrix { |
| public: |
| CPDF_FixedMatrix(const CFX_Matrix& src, int bits) { |
| base = 1 << bits; |
| a = FXSYS_round(src.a * base); |
| b = FXSYS_round(src.b * base); |
| c = FXSYS_round(src.c * base); |
| d = FXSYS_round(src.d * base); |
| e = FXSYS_round(src.e * base); |
| f = FXSYS_round(src.f * base); |
| } |
| inline void Transform(int x, int y, int& x1, int& y1) { |
| x1 = (a * x + c * y + e + base / 2) / base; |
| y1 = (b * x + d * y + f + base / 2) / base; |
| } |
| int a, b, c, d, e, f; |
| int base; |
| }; |
| #define FPDF_HUGE_IMAGE_SIZE 60000000 |
| struct PixelWeight { |
| int m_SrcStart; |
| int m_SrcEnd; |
| int m_Weights[1]; |
| }; |
| |
| class CWeightTable { |
| public: |
| CWeightTable(); |
| ~CWeightTable(); |
| |
| bool Calc(int dest_len, |
| int dest_min, |
| int dest_max, |
| int src_len, |
| int src_min, |
| int src_max, |
| int flags); |
| PixelWeight* GetPixelWeight(int pixel) const; |
| int* GetValueFromPixelWeight(PixelWeight* pWeight, int index) const; |
| size_t GetPixelWeightSize() const; |
| |
| private: |
| int m_DestMin; |
| int m_ItemSize; |
| uint8_t* m_pWeightTables; |
| size_t m_dwWeightTablesSize; |
| }; |
| |
| class CStretchEngine { |
| public: |
| CStretchEngine(IFX_ScanlineComposer* pDestBitmap, |
| FXDIB_Format dest_format, |
| int dest_width, |
| int dest_height, |
| const FX_RECT& clip_rect, |
| const CFX_DIBSource* pSrcBitmap, |
| int flags); |
| ~CStretchEngine(); |
| |
| FX_BOOL Continue(IFX_Pause* pPause); |
| |
| FX_BOOL StartStretchHorz(); |
| FX_BOOL ContinueStretchHorz(IFX_Pause* pPause); |
| void StretchVert(); |
| |
| FXDIB_Format m_DestFormat; |
| int m_DestBpp; |
| int m_SrcBpp; |
| int m_bHasAlpha; |
| IFX_ScanlineComposer* m_pDestBitmap; |
| int m_DestWidth, m_DestHeight; |
| FX_RECT m_DestClip; |
| uint8_t* m_pDestScanline; |
| uint8_t* m_pDestMaskScanline; |
| FX_RECT m_SrcClip; |
| const CFX_DIBSource* m_pSource; |
| uint32_t* m_pSrcPalette; |
| int m_SrcWidth; |
| int m_SrcHeight; |
| int m_SrcPitch; |
| int m_InterPitch; |
| int m_ExtraMaskPitch; |
| uint8_t* m_pInterBuf; |
| uint8_t* m_pExtraAlphaBuf; |
| int m_TransMethod; |
| int m_Flags; |
| CWeightTable m_WeightTable; |
| int m_CurRow; |
| int m_State; |
| }; |
| |
| FX_RECT FXDIB_SwapClipBox(FX_RECT& clip, |
| int width, |
| int height, |
| FX_BOOL bFlipX, |
| FX_BOOL bFlipY); |
| |
| #endif // CORE_FXGE_DIB_DIB_INT_H_ |