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_SRC_FXGE_DIB_DIB_INT_H_ 8 #define CORE_SRC_FXGE_DIB_DIB_INT_H_ 9 10 #include <stdint.h> 11 12 #include "core/include/fxcrt/fx_coordinates.h" 13 #include "core/include/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 class CWeightTable { 44 public: CWeightTable()45 CWeightTable() { m_pWeightTables = NULL; } ~CWeightTable()46 ~CWeightTable() { 47 FX_Free(m_pWeightTables); 48 m_pWeightTables = NULL; 49 } 50 void Calc(int dest_len, 51 int dest_min, 52 int dest_max, 53 int src_len, 54 int src_min, 55 int src_max, 56 int flags); GetPixelWeight(int pixel)57 PixelWeight* GetPixelWeight(int pixel) { 58 return (PixelWeight*)(m_pWeightTables + (pixel - m_DestMin) * m_ItemSize); 59 } 60 int m_DestMin, m_ItemSize; 61 uint8_t* m_pWeightTables; 62 }; 63 class CStretchEngine { 64 public: 65 CStretchEngine(IFX_ScanlineComposer* pDestBitmap, 66 FXDIB_Format dest_format, 67 int dest_width, 68 int dest_height, 69 const FX_RECT& clip_rect, 70 const CFX_DIBSource* pSrcBitmap, 71 int flags); 72 ~CStretchEngine(); 73 FX_BOOL Continue(IFX_Pause* pPause); 74 75 public: 76 FXDIB_Format m_DestFormat; 77 int m_DestBpp, m_SrcBpp, m_bHasAlpha; 78 IFX_ScanlineComposer* m_pDestBitmap; 79 int m_DestWidth, m_DestHeight; 80 FX_RECT m_DestClip; 81 uint8_t* m_pDestScanline; 82 uint8_t* m_pDestMaskScanline; 83 FX_RECT m_SrcClip; 84 const CFX_DIBSource* m_pSource; 85 FX_DWORD* m_pSrcPalette; 86 int m_SrcWidth, m_SrcHeight; 87 int m_SrcPitch, m_InterPitch; 88 int m_ExtraMaskPitch; 89 unsigned char* m_pInterBuf; 90 unsigned char* m_pExtraAlphaBuf; 91 int m_TransMethod; 92 int m_Flags; 93 CWeightTable m_WeightTable; 94 int m_CurRow; 95 FX_BOOL StartStretchHorz(); 96 FX_BOOL ContinueStretchHorz(IFX_Pause* pPause); 97 void StretchVert(); 98 int m_State; 99 }; 100 101 FX_RECT FXDIB_SwapClipBox(FX_RECT& clip, 102 int width, 103 int height, 104 FX_BOOL bFlipX, 105 FX_BOOL bFlipY); 106 107 #endif // CORE_SRC_FXGE_DIB_DIB_INT_H_ 108