1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXGE_DIB_DIB_INT_H_ 8 #define CORE_FXGE_DIB_DIB_INT_H_ 9 10 #include <stdint.h> 11 12 #include "core/fxcrt/fx_coordinates.h" 13 #include "core/fxge/fx_dib.h" 14 15 class IFX_ScanlineComposer; 16 17 extern const int16_t SDP_Table[513]; 18 19 class CPDF_FixedMatrix { 20 public: CPDF_FixedMatrix(const CFX_Matrix & src,int bits)21 CPDF_FixedMatrix(const CFX_Matrix& src, int bits) { 22 base = 1 << bits; 23 a = FXSYS_round(src.a * base); 24 b = FXSYS_round(src.b * base); 25 c = FXSYS_round(src.c * base); 26 d = FXSYS_round(src.d * base); 27 e = FXSYS_round(src.e * base); 28 f = FXSYS_round(src.f * base); 29 } Transform(int x,int y,int & x1,int & y1)30 inline void Transform(int x, int y, int& x1, int& y1) { 31 x1 = (a * x + c * y + e + base / 2) / base; 32 y1 = (b * x + d * y + f + base / 2) / base; 33 } 34 int a, b, c, d, e, f; 35 int base; 36 }; 37 #define FPDF_HUGE_IMAGE_SIZE 60000000 38 struct PixelWeight { 39 int m_SrcStart; 40 int m_SrcEnd; 41 int m_Weights[1]; 42 }; 43 44 class CWeightTable { 45 public: 46 CWeightTable(); 47 ~CWeightTable(); 48 49 bool Calc(int dest_len, 50 int dest_min, 51 int dest_max, 52 int src_len, 53 int src_min, 54 int src_max, 55 int flags); 56 PixelWeight* GetPixelWeight(int pixel) const; 57 int* GetValueFromPixelWeight(PixelWeight* pWeight, int index) const; 58 size_t GetPixelWeightSize() const; 59 60 private: 61 int m_DestMin; 62 int m_ItemSize; 63 uint8_t* m_pWeightTables; 64 size_t m_dwWeightTablesSize; 65 }; 66 67 class CStretchEngine { 68 public: 69 CStretchEngine(IFX_ScanlineComposer* pDestBitmap, 70 FXDIB_Format dest_format, 71 int dest_width, 72 int dest_height, 73 const FX_RECT& clip_rect, 74 const CFX_DIBSource* pSrcBitmap, 75 int flags); 76 ~CStretchEngine(); 77 78 bool Continue(IFX_Pause* pPause); 79 80 bool StartStretchHorz(); 81 bool ContinueStretchHorz(IFX_Pause* pPause); 82 void StretchVert(); 83 84 FXDIB_Format m_DestFormat; 85 int m_DestBpp; 86 int m_SrcBpp; 87 int m_bHasAlpha; 88 IFX_ScanlineComposer* m_pDestBitmap; 89 int m_DestWidth, m_DestHeight; 90 FX_RECT m_DestClip; 91 uint8_t* m_pDestScanline; 92 uint8_t* m_pDestMaskScanline; 93 FX_RECT m_SrcClip; 94 const CFX_DIBSource* m_pSource; 95 uint32_t* m_pSrcPalette; 96 int m_SrcWidth; 97 int m_SrcHeight; 98 int m_SrcPitch; 99 int m_InterPitch; 100 int m_ExtraMaskPitch; 101 uint8_t* m_pInterBuf; 102 uint8_t* m_pExtraAlphaBuf; 103 int m_TransMethod; 104 int m_Flags; 105 CWeightTable m_WeightTable; 106 int m_CurRow; 107 int m_State; 108 }; 109 110 FX_RECT FXDIB_SwapClipBox(FX_RECT& clip, 111 int width, 112 int height, 113 bool bFlipX, 114 bool bFlipY); 115 116 #endif // CORE_FXGE_DIB_DIB_INT_H_ 117