OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef CORE_INCLUDE_FXGE_FX_DIB_H_ | 7 #ifndef CORE_INCLUDE_FXGE_FX_DIB_H_ |
8 #define CORE_INCLUDE_FXGE_FX_DIB_H_ | 8 #define CORE_INCLUDE_FXGE_FX_DIB_H_ |
9 | 9 |
10 #include "../fxcrt/fx_basic.h" | 10 #include "../fxcrt/fx_basic.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 #define FXDIB_BLEND_SATURATION 22 | 62 #define FXDIB_BLEND_SATURATION 22 |
63 #define FXDIB_BLEND_COLOR 23 | 63 #define FXDIB_BLEND_COLOR 23 |
64 #define FXDIB_BLEND_LUMINOSITY 24 | 64 #define FXDIB_BLEND_LUMINOSITY 24 |
65 #define FXDIB_BLEND_UNSUPPORTED -1 | 65 #define FXDIB_BLEND_UNSUPPORTED -1 |
66 typedef FX_DWORD FX_ARGB; | 66 typedef FX_DWORD FX_ARGB; |
67 typedef FX_DWORD FX_COLORREF; | 67 typedef FX_DWORD FX_COLORREF; |
68 typedef FX_DWORD FX_CMYK; | 68 typedef FX_DWORD FX_CMYK; |
69 class CFX_ClipRgn; | 69 class CFX_ClipRgn; |
70 class CFX_DIBSource; | 70 class CFX_DIBSource; |
71 class CFX_DIBitmap; | 71 class CFX_DIBitmap; |
| 72 class CStretchEngine; |
| 73 |
72 #define FXSYS_RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16)) | 74 #define FXSYS_RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16)) |
73 #define FXSYS_GetRValue(rgb) ((rgb)&0xff) | 75 #define FXSYS_GetRValue(rgb) ((rgb)&0xff) |
74 #define FXSYS_GetGValue(rgb) (((rgb) >> 8) & 0xff) | 76 #define FXSYS_GetGValue(rgb) (((rgb) >> 8) & 0xff) |
75 #define FXSYS_GetBValue(rgb) (((rgb) >> 16) & 0xff) | 77 #define FXSYS_GetBValue(rgb) (((rgb) >> 16) & 0xff) |
76 #define FX_CCOLOR(val) (255 - (val)) | 78 #define FX_CCOLOR(val) (255 - (val)) |
77 #define FXSYS_CMYK(c, m, y, k) (((c) << 24) | ((m) << 16) | ((y) << 8) | (k)) | 79 #define FXSYS_CMYK(c, m, y, k) (((c) << 24) | ((m) << 16) | ((y) << 8) | (k)) |
78 #define FXSYS_GetCValue(cmyk) ((uint8_t)((cmyk) >> 24) & 0xff) | 80 #define FXSYS_GetCValue(cmyk) ((uint8_t)((cmyk) >> 24) & 0xff) |
79 #define FXSYS_GetMValue(cmyk) ((uint8_t)((cmyk) >> 16) & 0xff) | 81 #define FXSYS_GetMValue(cmyk) ((uint8_t)((cmyk) >> 16) & 0xff) |
80 #define FXSYS_GetYValue(cmyk) ((uint8_t)((cmyk) >> 8) & 0xff) | 82 #define FXSYS_GetYValue(cmyk) ((uint8_t)((cmyk) >> 8) & 0xff) |
81 #define FXSYS_GetKValue(cmyk) ((uint8_t)(cmyk)&0xff) | 83 #define FXSYS_GetKValue(cmyk) ((uint8_t)(cmyk)&0xff) |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 void BuildPalette(); | 276 void BuildPalette(); |
275 | 277 |
276 FX_BOOL BuildAlphaMask(); | 278 FX_BOOL BuildAlphaMask(); |
277 | 279 |
278 int FindPalette(FX_DWORD color) const; | 280 int FindPalette(FX_DWORD color) const; |
279 | 281 |
280 void GetPalette(FX_DWORD* pal, int alpha) const; | 282 void GetPalette(FX_DWORD* pal, int alpha) const; |
281 }; | 283 }; |
282 class CFX_DIBitmap : public CFX_DIBSource { | 284 class CFX_DIBitmap : public CFX_DIBSource { |
283 public: | 285 public: |
284 virtual ~CFX_DIBitmap(); | |
285 | |
286 CFX_DIBitmap(); | 286 CFX_DIBitmap(); |
287 | 287 explicit CFX_DIBitmap(const CFX_DIBitmap& src); |
288 CFX_DIBitmap(const CFX_DIBitmap& src); | 288 ~CFX_DIBitmap() override; |
289 | 289 |
290 FX_BOOL Create(int width, | 290 FX_BOOL Create(int width, |
291 int height, | 291 int height, |
292 FXDIB_Format format, | 292 FXDIB_Format format, |
293 uint8_t* pBuffer = NULL, | 293 uint8_t* pBuffer = NULL, |
294 int pitch = 0); | 294 int pitch = 0); |
295 | 295 |
296 FX_BOOL Copy(const CFX_DIBSource* pSrc); | 296 FX_BOOL Copy(const CFX_DIBSource* pSrc); |
297 | 297 |
298 virtual uint8_t* GetBuffer() const { return m_pBuffer; } | 298 // CFX_DIBSource |
299 | 299 uint8_t* GetBuffer() const override { return m_pBuffer; } |
300 virtual const uint8_t* GetScanline(int line) const { | 300 const uint8_t* GetScanline(int line) const override { |
301 return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL; | 301 return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL; |
302 } | 302 } |
303 | 303 void DownSampleScanline(int line, |
304 virtual void DownSampleScanline(int line, | 304 uint8_t* dest_scan, |
305 uint8_t* dest_scan, | 305 int dest_bpp, |
306 int dest_bpp, | 306 int dest_width, |
307 int dest_width, | 307 FX_BOOL bFlipX, |
308 FX_BOOL bFlipX, | 308 int clip_left, |
309 int clip_left, | 309 int clip_width) const override; |
310 int clip_width) const; | |
311 | 310 |
312 void TakeOver(CFX_DIBitmap* pSrcBitmap); | 311 void TakeOver(CFX_DIBitmap* pSrcBitmap); |
313 | 312 |
314 FX_BOOL ConvertFormat(FXDIB_Format format, void* pIccTransform = NULL); | 313 FX_BOOL ConvertFormat(FXDIB_Format format, void* pIccTransform = NULL); |
315 | 314 |
316 void Clear(FX_DWORD color); | 315 void Clear(FX_DWORD color); |
317 | 316 |
318 FX_DWORD GetPixel(int x, int y) const; | 317 FX_DWORD GetPixel(int x, int y) const; |
319 | 318 |
320 void SetPixel(int x, int y, FX_DWORD color); | 319 void SetPixel(int x, int y, FX_DWORD color); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 public: | 399 public: |
401 CFX_DIBExtractor(const CFX_DIBSource* pSrc); | 400 CFX_DIBExtractor(const CFX_DIBSource* pSrc); |
402 | 401 |
403 ~CFX_DIBExtractor(); | 402 ~CFX_DIBExtractor(); |
404 | 403 |
405 operator CFX_DIBitmap*() { return m_pBitmap; } | 404 operator CFX_DIBitmap*() { return m_pBitmap; } |
406 | 405 |
407 private: | 406 private: |
408 CFX_DIBitmap* m_pBitmap; | 407 CFX_DIBitmap* m_pBitmap; |
409 }; | 408 }; |
| 409 |
410 typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef; | 410 typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef; |
411 class CFX_FilteredDIB : public CFX_DIBSource { | 411 class CFX_FilteredDIB : public CFX_DIBSource { |
412 public: | 412 public: |
413 CFX_FilteredDIB(); | 413 CFX_FilteredDIB(); |
414 | 414 ~CFX_FilteredDIB() override; |
415 ~CFX_FilteredDIB(); | |
416 | 415 |
417 void LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE); | 416 void LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE); |
418 | 417 |
419 virtual FXDIB_Format GetDestFormat() = 0; | 418 virtual FXDIB_Format GetDestFormat() = 0; |
420 | 419 |
421 virtual FX_DWORD* GetDestPalette() = 0; | 420 virtual FX_DWORD* GetDestPalette() = 0; |
422 | 421 |
423 virtual void TranslateScanline(uint8_t* dest_buf, | 422 virtual void TranslateScanline(uint8_t* dest_buf, |
424 const uint8_t* src_buf) const = 0; | 423 const uint8_t* src_buf) const = 0; |
425 | 424 |
426 virtual void TranslateDownSamples(uint8_t* dest_buf, | 425 virtual void TranslateDownSamples(uint8_t* dest_buf, |
427 const uint8_t* src_buf, | 426 const uint8_t* src_buf, |
428 int pixels, | 427 int pixels, |
429 int Bpp) const = 0; | 428 int Bpp) const = 0; |
430 | 429 |
431 protected: | 430 protected: |
432 virtual const uint8_t* GetScanline(int line) const; | 431 // CFX_DIBSource |
433 virtual void DownSampleScanline(int line, | 432 const uint8_t* GetScanline(int line) const override; |
434 uint8_t* dest_scan, | 433 void DownSampleScanline(int line, |
435 int dest_bpp, | 434 uint8_t* dest_scan, |
436 int dest_width, | 435 int dest_bpp, |
437 FX_BOOL bFlipX, | 436 int dest_width, |
438 int clip_left, | 437 FX_BOOL bFlipX, |
439 int clip_width) const; | 438 int clip_left, |
| 439 int clip_width) const override; |
440 | 440 |
441 const CFX_DIBSource* m_pSrc; | 441 const CFX_DIBSource* m_pSrc; |
442 | 442 |
443 FX_BOOL m_bAutoDropSrc; | 443 FX_BOOL m_bAutoDropSrc; |
444 | 444 |
445 uint8_t* m_pScanline; | 445 uint8_t* m_pScanline; |
446 }; | 446 }; |
| 447 |
447 class IFX_ScanlineComposer { | 448 class IFX_ScanlineComposer { |
448 public: | 449 public: |
449 virtual ~IFX_ScanlineComposer() {} | 450 virtual ~IFX_ScanlineComposer() {} |
450 | 451 |
451 virtual void ComposeScanline(int line, | 452 virtual void ComposeScanline(int line, |
452 const uint8_t* scanline, | 453 const uint8_t* scanline, |
453 const uint8_t* scan_extra_alpha = NULL) = 0; | 454 const uint8_t* scan_extra_alpha = NULL) = 0; |
454 | 455 |
455 virtual FX_BOOL SetInfo(int width, | 456 virtual FX_BOOL SetInfo(int width, |
456 int height, | 457 int height, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 FXDIB_Format m_SrcFormat, m_DestFormat; | 508 FXDIB_Format m_SrcFormat, m_DestFormat; |
508 FX_DWORD* m_pSrcPalette; | 509 FX_DWORD* m_pSrcPalette; |
509 | 510 |
510 int m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, m_MaskBlack; | 511 int m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, m_MaskBlack; |
511 int m_BlendType; | 512 int m_BlendType; |
512 void* m_pIccTransform; | 513 void* m_pIccTransform; |
513 uint8_t* m_pCacheScanline; | 514 uint8_t* m_pCacheScanline; |
514 int m_CacheSize; | 515 int m_CacheSize; |
515 FX_BOOL m_bRgbByteOrder; | 516 FX_BOOL m_bRgbByteOrder; |
516 }; | 517 }; |
| 518 |
517 class CFX_BitmapComposer : public IFX_ScanlineComposer { | 519 class CFX_BitmapComposer : public IFX_ScanlineComposer { |
518 public: | 520 public: |
519 CFX_BitmapComposer(); | 521 CFX_BitmapComposer(); |
520 | 522 ~CFX_BitmapComposer() override; |
521 ~CFX_BitmapComposer(); | |
522 | 523 |
523 void Compose(CFX_DIBitmap* pDest, | 524 void Compose(CFX_DIBitmap* pDest, |
524 const CFX_ClipRgn* pClipRgn, | 525 const CFX_ClipRgn* pClipRgn, |
525 int bitmap_alpha, | 526 int bitmap_alpha, |
526 FX_DWORD mask_color, | 527 FX_DWORD mask_color, |
527 FX_RECT& dest_rect, | 528 FX_RECT& dest_rect, |
528 FX_BOOL bVertical, | 529 FX_BOOL bVertical, |
529 FX_BOOL bFlipX, | 530 FX_BOOL bFlipX, |
530 FX_BOOL bFlipY, | 531 FX_BOOL bFlipY, |
531 FX_BOOL bRgbByteOrder = FALSE, | 532 FX_BOOL bRgbByteOrder = FALSE, |
532 int alpha_flag = 0, | 533 int alpha_flag = 0, |
533 void* pIccTransform = NULL, | 534 void* pIccTransform = NULL, |
534 int blend_type = FXDIB_BLEND_NORMAL); | 535 int blend_type = FXDIB_BLEND_NORMAL); |
535 | 536 |
536 virtual FX_BOOL SetInfo(int width, | 537 // IFX_ScanlineComposer |
537 int height, | 538 FX_BOOL SetInfo(int width, |
538 FXDIB_Format src_format, | 539 int height, |
539 FX_DWORD* pSrcPalette); | 540 FXDIB_Format src_format, |
| 541 FX_DWORD* pSrcPalette) override; |
540 | 542 |
541 virtual void ComposeScanline(int line, | 543 void ComposeScanline(int line, |
542 const uint8_t* scanline, | 544 const uint8_t* scanline, |
543 const uint8_t* scan_extra_alpha); | 545 const uint8_t* scan_extra_alpha) override; |
544 | 546 |
545 protected: | 547 protected: |
546 void DoCompose(uint8_t* dest_scan, | 548 void DoCompose(uint8_t* dest_scan, |
547 const uint8_t* src_scan, | 549 const uint8_t* src_scan, |
548 int dest_width, | 550 int dest_width, |
549 const uint8_t* clip_scan, | 551 const uint8_t* clip_scan, |
550 const uint8_t* src_extra_alpha = NULL, | 552 const uint8_t* src_extra_alpha = NULL, |
551 uint8_t* dst_extra_alpha = NULL); | 553 uint8_t* dst_extra_alpha = NULL); |
552 CFX_DIBitmap* m_pBitmap; | 554 CFX_DIBitmap* m_pBitmap; |
553 const CFX_ClipRgn* m_pClipRgn; | 555 const CFX_ClipRgn* m_pClipRgn; |
554 FXDIB_Format m_SrcFormat; | 556 FXDIB_Format m_SrcFormat; |
555 int m_DestLeft, m_DestTop, m_DestWidth, m_DestHeight, m_BitmapAlpha; | 557 int m_DestLeft, m_DestTop, m_DestWidth, m_DestHeight, m_BitmapAlpha; |
556 FX_DWORD m_MaskColor; | 558 FX_DWORD m_MaskColor; |
557 const CFX_DIBitmap* m_pClipMask; | 559 const CFX_DIBitmap* m_pClipMask; |
558 CFX_ScanlineCompositor m_Compositor; | 560 CFX_ScanlineCompositor m_Compositor; |
559 FX_BOOL m_bVertical, m_bFlipX, m_bFlipY; | 561 FX_BOOL m_bVertical, m_bFlipX, m_bFlipY; |
560 int m_AlphaFlag; | 562 int m_AlphaFlag; |
561 void* m_pIccTransform; | 563 void* m_pIccTransform; |
562 FX_BOOL m_bRgbByteOrder; | 564 FX_BOOL m_bRgbByteOrder; |
563 int m_BlendType; | 565 int m_BlendType; |
564 void ComposeScanlineV(int line, | 566 void ComposeScanlineV(int line, |
565 const uint8_t* scanline, | 567 const uint8_t* scanline, |
566 const uint8_t* scan_extra_alpha = NULL); | 568 const uint8_t* scan_extra_alpha = NULL); |
567 uint8_t* m_pScanlineV; | 569 uint8_t* m_pScanlineV; |
568 uint8_t* m_pClipScanV; | 570 uint8_t* m_pClipScanV; |
569 uint8_t* m_pAddClipScan; | 571 uint8_t* m_pAddClipScan; |
570 uint8_t* m_pScanlineAlphaV; | 572 uint8_t* m_pScanlineAlphaV; |
571 }; | 573 }; |
| 574 |
572 class CFX_BitmapStorer : public IFX_ScanlineComposer { | 575 class CFX_BitmapStorer : public IFX_ScanlineComposer { |
573 public: | 576 public: |
574 CFX_BitmapStorer(); | 577 CFX_BitmapStorer(); |
| 578 ~CFX_BitmapStorer() override; |
575 | 579 |
576 ~CFX_BitmapStorer(); | 580 // IFX_ScanlineComposer |
| 581 void ComposeScanline(int line, |
| 582 const uint8_t* scanline, |
| 583 const uint8_t* scan_extra_alpha) override; |
577 | 584 |
578 virtual void ComposeScanline(int line, | 585 FX_BOOL SetInfo(int width, |
579 const uint8_t* scanline, | 586 int height, |
580 const uint8_t* scan_extra_alpha); | 587 FXDIB_Format src_format, |
581 | 588 FX_DWORD* pSrcPalette) override; |
582 virtual FX_BOOL SetInfo(int width, | |
583 int height, | |
584 FXDIB_Format src_format, | |
585 FX_DWORD* pSrcPalette); | |
586 | 589 |
587 CFX_DIBitmap* GetBitmap() { return m_pBitmap; } | 590 CFX_DIBitmap* GetBitmap() { return m_pBitmap; } |
588 | 591 |
589 CFX_DIBitmap* Detach(); | 592 CFX_DIBitmap* Detach(); |
590 | 593 |
591 void Replace(CFX_DIBitmap* pBitmap); | 594 void Replace(CFX_DIBitmap* pBitmap); |
592 | 595 |
593 private: | 596 private: |
594 CFX_DIBitmap* m_pBitmap; | 597 CFX_DIBitmap* m_pBitmap; |
595 }; | 598 }; |
596 class CStretchEngine; | 599 |
597 class CFX_ImageStretcher { | 600 class CFX_ImageStretcher { |
598 public: | 601 public: |
599 CFX_ImageStretcher(); | 602 CFX_ImageStretcher(); |
600 ~CFX_ImageStretcher(); | 603 ~CFX_ImageStretcher(); |
601 | 604 |
602 FX_BOOL Start(IFX_ScanlineComposer* pDest, | 605 FX_BOOL Start(IFX_ScanlineComposer* pDest, |
603 const CFX_DIBSource* pBitmap, | 606 const CFX_DIBSource* pBitmap, |
604 int dest_width, | 607 int dest_width, |
605 int dest_height, | 608 int dest_height, |
606 const FX_RECT& bitmap_rect, | 609 const FX_RECT& bitmap_rect, |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 int m_Status; | 685 int m_Status; |
683 FX_RECT m_ClipBox; | 686 FX_RECT m_ClipBox; |
684 FX_DWORD m_Flags; | 687 FX_DWORD m_Flags; |
685 int m_AlphaFlag; | 688 int m_AlphaFlag; |
686 void* m_pIccTransform; | 689 void* m_pIccTransform; |
687 FX_BOOL m_bRgbByteOrder; | 690 FX_BOOL m_bRgbByteOrder; |
688 int m_BlendType; | 691 int m_BlendType; |
689 }; | 692 }; |
690 | 693 |
691 #endif // CORE_INCLUDE_FXGE_FX_DIB_H_ | 694 #endif // CORE_INCLUDE_FXGE_FX_DIB_H_ |
OLD | NEW |