Home | History | Annotate | Download | only in dib
      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 class CPDF_FixedMatrix : public CFX_Object
      8 {
      9 public:
     10     CPDF_FixedMatrix(const CFX_AffineMatrix& src, int bits)
     11     {
     12         base = 1 << bits;
     13         a = FXSYS_round(src.a * base);
     14         b = FXSYS_round(src.b * base);
     15         c = FXSYS_round(src.c * base);
     16         d = FXSYS_round(src.d * base);
     17         e = FXSYS_round(src.e * base);
     18         f = FXSYS_round(src.f * base);
     19     }
     20     inline void	Transform(int x, int y, int& x1, int& y1)
     21     {
     22         x1 = (a * x + c * y + e + base / 2) / base;
     23         y1 = (b * x + d * y + f + base / 2) / base;
     24     }
     25     int		a, b, c, d, e, f;
     26     int		base;
     27 };
     28 #define FPDF_HUGE_IMAGE_SIZE	60000000
     29 struct PixelWeight {
     30     int		m_SrcStart;
     31     int		m_SrcEnd;
     32     int		m_Weights[1];
     33 };
     34 class CWeightTable : public CFX_Object
     35 {
     36 public:
     37     CWeightTable()
     38     {
     39         m_pWeightTables = NULL;
     40     }
     41     ~CWeightTable()
     42     {
     43         if(m_pWeightTables) {
     44             FX_Free(m_pWeightTables);
     45         }
     46         m_pWeightTables = NULL;
     47     }
     48     void			Calc(int dest_len, int dest_min, int dest_max, int src_len, int src_min, int src_max, int flags);
     49     PixelWeight*	GetPixelWeight(int pixel)
     50     {
     51         return (PixelWeight*)(m_pWeightTables + (pixel - m_DestMin) * m_ItemSize);
     52     }
     53     int				m_DestMin, m_ItemSize;
     54     FX_LPBYTE		m_pWeightTables;
     55 };
     56 class CStretchEngine : public CFX_Object
     57 {
     58 public:
     59     CStretchEngine(IFX_ScanlineComposer* pDestBitmap, FXDIB_Format dest_format,
     60                    int dest_width, int dest_height, const FX_RECT& clip_rect,
     61                    const CFX_DIBSource* pSrcBitmap, int flags);
     62     ~CStretchEngine();
     63     FX_BOOL		Continue(IFX_Pause* pPause);
     64 public:
     65     FXDIB_Format m_DestFormat;
     66     int		m_DestBpp, m_SrcBpp, m_bHasAlpha;
     67     IFX_ScanlineComposer*	m_pDestBitmap;
     68     int		m_DestWidth, m_DestHeight;
     69     FX_RECT	m_DestClip;
     70     FX_LPBYTE	m_pDestScanline;
     71     FX_LPBYTE   m_pDestMaskScanline;
     72     FX_RECT	m_SrcClip;
     73     const CFX_DIBSource*	m_pSource;
     74     FX_DWORD*	m_pSrcPalette;
     75     int		m_SrcWidth, m_SrcHeight;
     76     int		m_SrcPitch, m_InterPitch;
     77     int m_ExtraMaskPitch;
     78     unsigned char*	m_pInterBuf;
     79     unsigned char*	m_pExtraAlphaBuf;
     80     int		m_TransMethod;
     81     int 	m_Flags;
     82     CWeightTable	m_WeightTable;
     83     int		m_CurRow;
     84     FX_BOOL	StartStretchHorz();
     85     FX_BOOL	ContinueStretchHorz(IFX_Pause* pPause);
     86     void	StretchVert();
     87     int		m_State;
     88 };
     89