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 _JBIG2_IMAGE_H_
8#define _JBIG2_IMAGE_H_
9#include "JBig2_Define.h"
10#include "JBig2_Module.h"
11typedef enum {
12    JBIG2_COMPOSE_OR		= 0,
13    JBIG2_COMPOSE_AND		= 1,
14    JBIG2_COMPOSE_XOR		= 2,
15    JBIG2_COMPOSE_XNOR		= 3,
16    JBIG2_COMPOSE_REPLACE	= 4
17} JBig2ComposeOp;
18struct FX_RECT;
19class CJBig2_Image : public CJBig2_Object
20{
21public:
22
23    CJBig2_Image(FX_INT32 w, FX_INT32 h);
24
25    CJBig2_Image(FX_INT32 w, FX_INT32 h, FX_INT32 stride, FX_BYTE*pBuf);
26
27    CJBig2_Image(CJBig2_Image &im);
28
29    ~CJBig2_Image();
30
31    FX_BOOL getPixel(FX_INT32 x, FX_INT32 y);
32
33    FX_INT32 setPixel(FX_INT32 x, FX_INT32 y, FX_BOOL v);
34
35    void copyLine(FX_INT32 hTo, FX_INT32 hFrom);
36
37    void fill(FX_BOOL v);
38
39    FX_BOOL composeTo(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig2ComposeOp op);
40    FX_BOOL composeTo(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig2ComposeOp op, const FX_RECT* pSrcRect);
41
42    FX_BOOL composeTo_unopt(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig2ComposeOp op);
43
44    FX_BOOL composeTo_opt(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig2ComposeOp op);
45
46    FX_BOOL composeTo_opt2(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig2ComposeOp op);
47    FX_BOOL composeTo_opt2(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig2ComposeOp op, const FX_RECT* pSrcRect);
48
49    FX_BOOL composeFrom(FX_INT32 x, FX_INT32 y, CJBig2_Image *pSrc, JBig2ComposeOp op);
50    FX_BOOL composeFrom(FX_INT32 x, FX_INT32 y, CJBig2_Image *pSrc, JBig2ComposeOp op, const FX_RECT* pSrcRect);
51    CJBig2_Image *subImage_unopt(FX_INT32 x, FX_INT32 y, FX_INT32 w, FX_INT32 h);
52
53    CJBig2_Image *subImage(FX_INT32 x, FX_INT32 y, FX_INT32 w, FX_INT32 h);
54
55    void expand(FX_INT32 h, FX_BOOL v);
56public:
57
58    FX_INT32 m_nWidth;
59
60    FX_INT32 m_nHeight;
61
62    FX_INT32 m_nStride;
63
64    FX_BYTE *m_pData;
65
66    FX_BOOL m_bNeedFree;
67};
68#endif
69