1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FXGE_DIB_DIB_INT_H_ 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FXGE_DIB_DIB_INT_H_ 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <stdint.h> 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_coordinates.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/fx_dib.h" 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_ScanlineComposer; 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern const int16_t SDP_Table[513]; 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FixedMatrix { 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FixedMatrix(const CFX_Matrix& src, int bits) { 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann base = 1 << bits; 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann a = FXSYS_round(src.a * base); 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann b = FXSYS_round(src.b * base); 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann c = FXSYS_round(src.c * base); 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann d = FXSYS_round(src.d * base); 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann e = FXSYS_round(src.e * base); 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann f = FXSYS_round(src.f * base); 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann inline void Transform(int x, int y, int& x1, int& y1) { 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann x1 = (a * x + c * y + e + base / 2) / base; 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann y1 = (b * x + d * y + f + base / 2) / base; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int a, b, c, d, e, f; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int base; 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FPDF_HUGE_IMAGE_SIZE 60000000 38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct PixelWeight { 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_SrcStart; 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_SrcEnd; 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Weights[1]; 42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CWeightTable { 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CWeightTable(); 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~CWeightTable(); 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool Calc(int dest_len, 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int dest_min, 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int dest_max, 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int src_len, 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int src_min, 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int src_max, 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int flags); 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PixelWeight* GetPixelWeight(int pixel) const; 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int* GetValueFromPixelWeight(PixelWeight* pWeight, int index) const; 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann size_t GetPixelWeightSize() const; 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private: 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_DestMin; 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_ItemSize; 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t* m_pWeightTables; 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann size_t m_dwWeightTablesSize; 65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CStretchEngine { 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CStretchEngine(IFX_ScanlineComposer* pDestBitmap, 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXDIB_Format dest_format, 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int dest_width, 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int dest_height, 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_RECT& clip_rect, 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_DIBSource* pSrcBitmap, 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int flags); 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CStretchEngine(); 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool Continue(IFX_Pause* pPause); 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool StartStretchHorz(); 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ContinueStretchHorz(IFX_Pause* pPause); 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void StretchVert(); 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXDIB_Format m_DestFormat; 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_DestBpp; 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_SrcBpp; 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_bHasAlpha; 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_ScanlineComposer* m_pDestBitmap; 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_DestWidth, m_DestHeight; 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_RECT m_DestClip; 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t* m_pDestScanline; 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t* m_pDestMaskScanline; 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_RECT m_SrcClip; 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_DIBSource* m_pSource; 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t* m_pSrcPalette; 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_SrcWidth; 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_SrcHeight; 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_SrcPitch; 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int m_InterPitch; 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_ExtraMaskPitch; 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint8_t* m_pInterBuf; 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint8_t* m_pExtraAlphaBuf; 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_TransMethod; 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Flags; 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CWeightTable m_WeightTable; 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_CurRow; 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_State; 108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_RECT FXDIB_SwapClipBox(FX_RECT& clip, 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int width, 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int height, 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bFlipX, 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bFlipY); 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // CORE_FXGE_DIB_DIB_INT_H_ 117