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.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
9 #ifndef _FXCRT_EXTENSION_
10 #include "../fxcrt/fx_ext.h"
14 FXDIB_1bppMask = 0x101,
15 FXDIB_1bppRgb = 0x001,
16 FXDIB_1bppCmyk = 0x401,
17 FXDIB_8bppMask = 0x108,
18 FXDIB_8bppRgb = 0x008,
19 FXDIB_8bppRgba = 0x208,
20 FXDIB_8bppCmyk = 0x408,
21 FXDIB_8bppCmyka = 0x608,
39 #define FXDIB_DOWNSAMPLE 0x04
40 #define FXDIB_INTERPOL 0x20
41 #define FXDIB_BICUBIC_INTERPOL 0x80
42 #define FXDIB_NOSMOOTH 0x100
43 #define FXDIB_PALETTE_LOC 0x01
44 #define FXDIB_PALETTE_WIN 0x02
45 #define FXDIB_PALETTE_MAC 0x04
46 #define FXDIB_BLEND_NORMAL 0
47 #define FXDIB_BLEND_MULTIPLY 1
48 #define FXDIB_BLEND_SCREEN 2
49 #define FXDIB_BLEND_OVERLAY 3
50 #define FXDIB_BLEND_DARKEN 4
51 #define FXDIB_BLEND_LIGHTEN 5
53 #define FXDIB_BLEND_COLORDODGE 6
54 #define FXDIB_BLEND_COLORBURN 7
55 #define FXDIB_BLEND_HARDLIGHT 8
56 #define FXDIB_BLEND_SOFTLIGHT 9
57 #define FXDIB_BLEND_DIFFERENCE 10
58 #define FXDIB_BLEND_EXCLUSION 11
59 #define FXDIB_BLEND_NONSEPARABLE 21
60 #define FXDIB_BLEND_HUE 21
61 #define FXDIB_BLEND_SATURATION 22
62 #define FXDIB_BLEND_COLOR 23
63 #define FXDIB_BLEND_LUMINOSITY 24
64 #define FXDIB_BLEND_UNSUPPORTED -1
65 typedef FX_DWORD FX_ARGB;
66 typedef FX_DWORD FX_COLORREF;
67 typedef FX_DWORD FX_CMYK;
71 #define FXSYS_RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16))
72 #define FXSYS_GetRValue(rgb) ((rgb) & 0xff)
73 #define FXSYS_GetGValue(rgb) (((rgb) >> 8) & 0xff)
74 #define FXSYS_GetBValue(rgb) (((rgb) >> 16) & 0xff)
75 #define FX_CCOLOR(val) (255-(val))
76 #define FXSYS_CMYK(c, m, y, k) (((c) << 24) | ((m) << 16) | ((y) << 8) | (k))
77 #define FXSYS_GetCValue(cmyk) ((FX_BYTE)((cmyk) >> 24) & 0xff)
78 #define FXSYS_GetMValue(cmyk) ((FX_BYTE)((cmyk) >> 16) & 0xff)
79 #define FXSYS_GetYValue(cmyk) ((FX_BYTE)((cmyk) >> 8) & 0xff)
80 #define FXSYS_GetKValue(cmyk) ((FX_BYTE)(cmyk) & 0xff)
81 void CmykDecode(FX_CMYK cmyk, int& c, int& m, int& y, int& k);
82 inline FX_CMYK CmykEncode(int c, int m, int y, int k)
84 return (c << 24) | (m << 16) | (y << 8) | k;
86 void ArgbDecode(FX_ARGB argb, int& a, int& r, int&g, int& b);
87 void ArgbDecode(FX_ARGB argb, int& a, FX_COLORREF& rgb);
88 inline FX_ARGB ArgbEncode(int a, int r, int g, int b)
90 return (a << 24) | (r << 16) | (g << 8) | b;
92 FX_ARGB ArgbEncode(int a, FX_COLORREF rgb);
93 #define FXARGB_A(argb) ((FX_BYTE)((argb) >> 24))
94 #define FXARGB_R(argb) ((FX_BYTE)((argb) >> 16))
95 #define FXARGB_G(argb) ((FX_BYTE)((argb) >> 8))
96 #define FXARGB_B(argb) ((FX_BYTE)(argb))
97 #define FXARGB_MAKE(a,r,g,b) (((FX_DWORD)(a) << 24) | ((r) << 16) | ((g) << 8) | (b))
98 #define FXARGB_MUL_ALPHA(argb, alpha) (((((argb) >> 24) * (alpha) / 255) << 24) | ((argb) & 0xffffff))
99 #define FXRGB2GRAY(r,g,b) (((b) * 11 + (g) * 59 + (r) * 30) / 100)
100 #define FXCMYK2GRAY(c,m,y,k) (((255-(c)) * (255-(k)) * 30 + (255-(m)) * (255-(k)) * 59 + (255-(y)) * (255-(k)) * 11) / 25500)
101 #define FXDIB_ALPHA_MERGE(backdrop, source, source_alpha) (((backdrop) * (255-(source_alpha)) + (source)*(source_alpha))/255)
102 #define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest)*(src)/255)
103 #define FXCMYK_GETDIB(p) ((((FX_LPBYTE)(p))[0] << 24 | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | ((FX_LPBYTE)(p))[3]))
104 #define FXCMYK_SETDIB(p, cmyk) ((FX_LPBYTE)(p))[0] = (FX_BYTE)((cmyk) >> 24), \
105 ((FX_LPBYTE)(p))[1] = (FX_BYTE)((cmyk) >> 16), \
106 ((FX_LPBYTE)(p))[2] = (FX_BYTE)((cmyk) >> 8), \
107 ((FX_LPBYTE)(p))[3] = (FX_BYTE)(cmyk))
108 #define FXARGB_GETDIB(p) ((((FX_LPBYTE)(p))[0]) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[3] << 24))
109 #define FXARGB_SETDIB(p, argb) ((FX_LPBYTE)(p))[0] = (FX_BYTE)(argb), \
110 ((FX_LPBYTE)(p))[1] = (FX_BYTE)((argb) >> 8), \
111 ((FX_LPBYTE)(p))[2] = (FX_BYTE)((argb) >> 16), \
112 ((FX_LPBYTE)(p))[3] = (FX_BYTE)((argb) >> 24)
113 #define FXARGB_COPY(dest, src) *(FX_LPBYTE)(dest) = *(FX_LPBYTE)(src), \
114 *((FX_LPBYTE)(dest)+1) = *((FX_LPBYTE)(src)+1), \
115 *((FX_LPBYTE)(dest)+2) = *((FX_LPBYTE)(src)+2), \
116 *((FX_LPBYTE)(dest)+3) = *((FX_LPBYTE)(src)+3)
117 #define FXCMYK_COPY(dest, src) *(FX_LPBYTE)(dest) = *(FX_LPBYTE)(src), \
118 *((FX_LPBYTE)(dest)+1) = *((FX_LPBYTE)(src)+1), \
119 *((FX_LPBYTE)(dest)+2) = *((FX_LPBYTE)(src)+2), \
120 *((FX_LPBYTE)(dest)+3) = *((FX_LPBYTE)(src)+3)
121 #define FXARGB_SETRGBORDERDIB(p, argb) ((FX_LPBYTE)(p))[3] = (FX_BYTE)(argb>>24), \
122 ((FX_LPBYTE)(p))[0] = (FX_BYTE)((argb) >> 16), \
123 ((FX_LPBYTE)(p))[1] = (FX_BYTE)((argb) >> 8), \
124 ((FX_LPBYTE)(p))[2] = (FX_BYTE)(argb)
125 #define FXARGB_GETRGBORDERDIB(p) (((FX_LPBYTE)(p))[2]) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0] << 16) | (((FX_LPBYTE)(p))[3] << 24)
126 #define FXARGB_RGBORDERCOPY(dest, src) *((FX_LPBYTE)(dest)+3) = *((FX_LPBYTE)(src)+3), \
127 *(FX_LPBYTE)(dest) = *((FX_LPBYTE)(src)+2), \
128 *((FX_LPBYTE)(dest)+1) = *((FX_LPBYTE)(src)+1), \
129 *((FX_LPBYTE)(dest)+2) = *((FX_LPBYTE)(src))
130 #define FXARGB_TODIB(argb) (argb)
131 #define FXCMYK_TODIB(cmyk) ((FX_BYTE)((cmyk) >> 24) | ((FX_BYTE)((cmyk) >> 16)) << 8 | ((FX_BYTE)((cmyk) >> 8)) << 16 | ((FX_BYTE)(cmyk) << 24))
132 #define FXARGB_TOBGRORDERDIB(argb) ((FX_BYTE)(argb>>16) | ((FX_BYTE)(argb>>8)) << 8 | ((FX_BYTE)(argb)) << 16 | ((FX_BYTE)(argb>>24) << 24))
133 #define FXGETFLAG_COLORTYPE(flag) (FX_BYTE)((flag)>>8)
134 #define FXGETFLAG_ALPHA_FILL(flag) (FX_BYTE)(flag)
135 #define FXGETFLAG_ALPHA_STROKE(flag) (FX_BYTE)((flag)>>16)
136 #define FXSETFLAG_COLORTYPE(flag, val) flag = (((val)<<8)|(flag&0xffff00ff))
137 #define FXSETFLAG_ALPHA_FILL(flag, val) flag = ((val)|(flag&0xffffff00))
138 #define FXSETFLAG_ALPHA_STROKE(flag, val) flag = (((val)<<16)|(flag&0xff00ffff))
139 class CFX_DIBSource : public CFX_Object
143 virtual ~CFX_DIBSource();
152 int GetHeight() const
157 FXDIB_Format GetFormat() const
159 return (FXDIB_Format)(m_AlphaFlag * 0x100 + m_bpp);
162 FX_DWORD GetPitch() const
167 FX_DWORD* GetPalette() const
174 virtual FX_LPBYTE GetBuffer() const
179 virtual FX_LPCBYTE GetScanline(int line) const = 0;
181 virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const
186 virtual void DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp,
187 int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const = 0;
189 virtual void SetDownSampleSize(int width, int height) const {}
196 FX_BOOL IsAlphaMask() const
198 return m_AlphaFlag == 1;
201 FX_BOOL HasAlpha() const
203 return m_AlphaFlag & 2 ? TRUE : FALSE;
206 FX_BOOL IsOpaqueImage() const
208 return !(m_AlphaFlag & 3);
211 FX_BOOL IsCmykImage() const
213 return m_AlphaFlag & 4 ? TRUE : FALSE;
218 int GetPaletteSize() const
220 return IsAlphaMask() ? 0 : (m_bpp == 1 ? 2 : (m_bpp == 8 ? 256 : 0));
223 FX_DWORD GetPaletteEntry(int index) const;
225 void SetPaletteEntry(int index, FX_DWORD color);
226 FX_DWORD GetPaletteArgb(int index) const
228 return GetPaletteEntry(index);
230 void SetPaletteArgb(int index, FX_DWORD color)
232 SetPaletteEntry(index, color);
235 void CopyPalette(const FX_DWORD* pSrcPal, FX_DWORD size = 256);
238 CFX_DIBitmap* Clone(const FX_RECT* pClip = NULL) const;
240 CFX_DIBitmap* CloneConvert(FXDIB_Format format, const FX_RECT* pClip = NULL, void* pIccTransform = NULL) const;
242 CFX_DIBitmap* StretchTo(int dest_width, int dest_height, FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const;
245 CFX_DIBitmap* TransformTo(const CFX_AffineMatrix* pMatrix, int& left, int &top,
246 FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const;
248 CFX_DIBitmap* GetAlphaMask(const FX_RECT* pClip = NULL) const;
250 FX_BOOL CopyAlphaMask(const CFX_DIBSource* pAlphaMask, const FX_RECT* pClip = NULL);
252 CFX_DIBitmap* SwapXY(FX_BOOL bXFlip, FX_BOOL bYFlip, const FX_RECT* pClip = NULL) const;
254 CFX_DIBitmap* FlipImage(FX_BOOL bXFlip, FX_BOOL bYFlip) const;
256 void GetOverlapRect(int& dest_left, int& dest_top, int& width, int& height, int src_width,
257 int src_height, int& src_left, int& src_top, const CFX_ClipRgn* pClipRgn);
259 CFX_DIBitmap* m_pAlphaMask;
270 FX_DWORD m_AlphaFlag;
274 FX_DWORD* m_pPalette;
278 FX_BOOL BuildAlphaMask();
280 int FindPalette(FX_DWORD color) const;
282 void GetPalette(FX_DWORD* pal, int alpha) const;
284 class CFX_DIBitmap : public CFX_DIBSource
288 virtual ~CFX_DIBitmap();
292 CFX_DIBitmap(const CFX_DIBitmap& src);
294 FX_BOOL Create(int width, int height, FXDIB_Format format, FX_LPBYTE pBuffer = NULL, int pitch = 0);
296 FX_BOOL Copy(const CFX_DIBSource* pSrc);
298 virtual FX_LPBYTE GetBuffer() const
303 virtual FX_LPCBYTE GetScanline(int line) const
305 return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL;
308 virtual void DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp,
309 int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;
311 void TakeOver(CFX_DIBitmap* pSrcBitmap);
313 FX_BOOL ConvertFormat(FXDIB_Format format, void* pIccTransform = NULL);
315 void Clear(FX_DWORD color);
317 FX_DWORD GetPixel(int x, int y) const;
319 void SetPixel(int x, int y, FX_DWORD color);
321 FX_BOOL LoadChannel(FXDIB_Channel destChannel, const CFX_DIBSource* pSrcBitmap, FXDIB_Channel srcChannel);
323 FX_BOOL LoadChannel(FXDIB_Channel destChannel, int value);
325 FX_BOOL MultiplyAlpha(int alpha);
327 FX_BOOL MultiplyAlpha(const CFX_DIBSource* pAlphaMask);
329 FX_BOOL TransferBitmap(int dest_left, int dest_top, int width, int height,
330 const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform = NULL);
332 FX_BOOL CompositeBitmap(int dest_left, int dest_top, int width, int height,
333 const CFX_DIBSource* pSrcBitmap, int src_left, int src_top,
334 int blend_type = FXDIB_BLEND_NORMAL, const CFX_ClipRgn* pClipRgn = NULL, FX_BOOL bRgbByteOrder = FALSE, void* pIccTransform = NULL);
336 FX_BOOL TransferMask(int dest_left, int dest_top, int width, int height,
337 const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top, int alpha_flag = 0, void* pIccTransform = NULL);
339 FX_BOOL CompositeMask(int dest_left, int dest_top, int width, int height,
340 const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top,
341 int blend_type = FXDIB_BLEND_NORMAL, const CFX_ClipRgn* pClipRgn = NULL, FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL);
343 FX_BOOL CompositeRect(int dest_left, int dest_top, int width, int height, FX_DWORD color, int alpha_flag = 0, void* pIccTransform = NULL);
345 FX_BOOL ConvertColorScale(FX_DWORD forecolor, FX_DWORD backcolor);
347 FX_BOOL DitherFS(const FX_DWORD* pPalette, int pal_size, const FX_RECT* pRect = NULL);
354 FX_BOOL GetGrayData(void* pIccTransform = NULL);
356 class CFX_DIBExtractor : public CFX_Object
360 CFX_DIBExtractor(const CFX_DIBSource* pSrc);
364 operator CFX_DIBitmap*()
370 CFX_DIBitmap* m_pBitmap;
372 typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef;
373 class CFX_FilteredDIB : public CFX_DIBSource
381 void LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE);
383 virtual FXDIB_Format GetDestFormat() = 0;
385 virtual FX_DWORD* GetDestPalette() = 0;
388 virtual void TranslateScanline(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf) const = 0;
390 virtual void TranslateDownSamples(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels, int Bpp) const = 0;
392 virtual FX_LPCBYTE GetScanline(int line) const;
393 virtual void DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp,
394 int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;
396 const CFX_DIBSource* m_pSrc;
398 FX_BOOL m_bAutoDropSrc;
400 FX_LPBYTE m_pScanline;
402 class IFX_ScanlineComposer
406 virtual void ComposeScanline(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha = NULL) = 0;
409 virtual FX_BOOL SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette) = 0;
411 class CFX_ScanlineCompositor : public CFX_Object
415 CFX_ScanlineCompositor();
417 ~CFX_ScanlineCompositor();
419 FX_BOOL Init(FXDIB_Format dest_format, FXDIB_Format src_format, FX_INT32 width, FX_DWORD* pSrcPalette,
420 FX_DWORD mask_color, int blend_type, FX_BOOL bClip, FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL);
423 void CompositeRgbBitmapLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int width, FX_LPCBYTE clip_scan,
424 FX_LPCBYTE src_extra_alpha = NULL, FX_LPBYTE dst_extra_alpha = NULL);
427 void CompositePalBitmapLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int src_left, int width, FX_LPCBYTE clip_scan,
428 FX_LPCBYTE src_extra_alpha = NULL, FX_LPBYTE dst_extra_alpha = NULL);
431 void CompositeByteMaskLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int width, FX_LPCBYTE clip_scan,
432 FX_LPBYTE dst_extra_alpha = NULL);
435 void CompositeBitMaskLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int src_left, int width, FX_LPCBYTE clip_scan,
436 FX_LPBYTE dst_extra_alpha = NULL);
439 FXDIB_Format m_SrcFormat,
441 FX_DWORD* m_pSrcPalette;
449 void* m_pIccTransform;
450 FX_LPBYTE m_pCacheScanline;
452 FX_BOOL m_bRgbByteOrder;
454 class CFX_BitmapComposer : public IFX_ScanlineComposer, public CFX_Object
458 CFX_BitmapComposer();
460 ~CFX_BitmapComposer();
463 void Compose(CFX_DIBitmap* pDest, const CFX_ClipRgn* pClipRgn, int bitmap_alpha,
464 FX_DWORD mask_color, FX_RECT& dest_rect, FX_BOOL bVertical,
465 FX_BOOL bFlipX, FX_BOOL bFlipY, FX_BOOL bRgbByteOrder = FALSE,
466 int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
468 virtual FX_BOOL SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette);
471 virtual void ComposeScanline(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha);
474 void DoCompose(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int dest_width, FX_LPCBYTE clip_scan,
475 FX_LPCBYTE src_extra_alpha = NULL, FX_LPBYTE dst_extra_alpha = NULL);
476 CFX_DIBitmap* m_pBitmap;
477 const CFX_ClipRgn* m_pClipRgn;
478 FXDIB_Format m_SrcFormat;
479 int m_DestLeft, m_DestTop, m_DestWidth, m_DestHeight, m_BitmapAlpha;
480 FX_DWORD m_MaskColor;
481 const CFX_DIBitmap* m_pClipMask;
482 CFX_ScanlineCompositor m_Compositor;
483 FX_BOOL m_bVertical, m_bFlipX, m_bFlipY;
485 void* m_pIccTransform;
486 FX_BOOL m_bRgbByteOrder;
488 void ComposeScanlineV(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha = NULL);
489 FX_LPBYTE m_pScanlineV, m_pClipScanV, m_pAddClipScan, m_pScanlineAlphaV;
491 class CFX_BitmapStorer : public IFX_ScanlineComposer, public CFX_Object
499 virtual void ComposeScanline(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha);
501 virtual FX_BOOL SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette);
503 CFX_DIBitmap* GetBitmap()
508 CFX_DIBitmap* Detach();
510 void Replace(CFX_DIBitmap* pBitmap);
512 CFX_DIBitmap* m_pBitmap;
514 class CStretchEngine;
515 class CFX_ImageStretcher : public CFX_Object
519 CFX_ImageStretcher();
521 ~CFX_ImageStretcher();
523 FX_INT32 Start(IFX_ScanlineComposer* pDest, const CFX_DIBSource* pBitmap,
524 int dest_width, int dest_height, const FX_RECT& bitmap_rect, FX_DWORD flags);
527 FX_INT32 Continue(IFX_Pause* pPause);
528 IFX_ScanlineComposer* m_pDest;
529 const CFX_DIBSource* m_pSource;
530 CStretchEngine* m_pStretchEngine;
539 FX_LPBYTE m_pScanline;
540 FX_LPBYTE m_pMaskScanline;
541 FXDIB_Format m_DestFormat;
544 FX_INT32 StartQuickStretch();
546 FX_INT32 StartStretch();
548 FX_INT32 ContinueQuickStretch(IFX_Pause* pPause);
550 FX_INT32 ContinueStretch(IFX_Pause* pPause);
552 class CFX_ImageTransformer : public CFX_Object
556 CFX_ImageTransformer();
558 ~CFX_ImageTransformer();
560 FX_INT32 Start(const CFX_DIBSource* pSrc, const CFX_AffineMatrix* pMatrix, int flags, const FX_RECT* pClip);
563 FX_INT32 Continue(IFX_Pause* pPause);
564 CFX_AffineMatrix* m_pMatrix;
565 FX_RECT m_StretchClip;
566 int m_ResultLeft, m_ResultTop, m_ResultWidth, m_ResultHeight;
567 CFX_AffineMatrix m_dest2stretch;
568 CFX_ImageStretcher m_Stretcher;
569 CFX_BitmapStorer m_Storer;
573 class CFX_ImageRenderer : public CFX_Object
579 ~CFX_ImageRenderer();
581 FX_INT32 Start(CFX_DIBitmap* pDevice, const CFX_ClipRgn* pClipRgn,
582 const CFX_DIBSource* pSource, int bitmap_alpha,
583 FX_DWORD mask_color, const CFX_AffineMatrix* pMatrix, FX_DWORD dib_flags,
584 FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL,
585 int blend_type = FXDIB_BLEND_NORMAL);
587 FX_INT32 Continue(IFX_Pause* pPause);
589 CFX_DIBitmap* m_pDevice;
590 const CFX_ClipRgn* m_pClipRgn;
592 FX_DWORD m_MaskColor;
593 CFX_AffineMatrix m_Matrix;
594 CFX_ImageTransformer* m_pTransformer;
595 CFX_ImageStretcher m_Stretcher;
596 CFX_BitmapComposer m_Composer;
598 int m_DestLeft, m_DestTop;
602 void* m_pIccTransform;
603 FX_BOOL m_bRgbByteOrder;