| 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 #include "../../../../include/fxge/fx_ge.h" | 7 #include "../../../../include/fxge/fx_ge.h" |
| 8 #include "../../dib/dib_int.h" | 8 #include "../../dib/dib_int.h" |
| 9 #include "../../ge/text_int.h" | 9 #include "../../ge/text_int.h" |
| 10 #include "../../../../include/fxcodec/fx_codec.h" | 10 #include "../../../../include/fxcodec/fx_codec.h" |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 } | 404 } |
| 405 if (m_bRgbByteOrder) { | 405 if (m_bRgbByteOrder) { |
| 406 if (Bpp == 4 && bDestAlpha) { | 406 if (Bpp == 4 && bDestAlpha) { |
| 407 for (int col = col_start; col < col_end; col ++) { | 407 for (int col = col_start; col < col_end; col ++) { |
| 408 int src_alpha; | 408 int src_alpha; |
| 409 if (clip_scan) { | 409 if (clip_scan) { |
| 410 src_alpha = m_Alpha * clip_scan[col] / 255; | 410 src_alpha = m_Alpha * clip_scan[col] / 255; |
| 411 } else { | 411 } else { |
| 412 src_alpha = m_Alpha; | 412 src_alpha = m_Alpha; |
| 413 } | 413 } |
| 414 FX_BYTE dest_alpha = ori_scan[3] + src_alpha - ori_scan[3] *
src_alpha / 255; | 414 uint8_t dest_alpha = ori_scan[3] + src_alpha - ori_scan[3] *
src_alpha / 255; |
| 415 dest_scan[3] = dest_alpha; | 415 dest_scan[3] = dest_alpha; |
| 416 int alpha_ratio = src_alpha * 255 / dest_alpha; | 416 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 417 if (m_bFullCover) { | 417 if (m_bFullCover) { |
| 418 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alp
ha_ratio); | 418 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alp
ha_ratio); |
| 419 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, a
lpha_ratio); | 419 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, a
lpha_ratio); |
| 420 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, al
pha_ratio); | 420 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, al
pha_ratio); |
| 421 dest_scan++; | 421 dest_scan++; |
| 422 ori_scan++; | 422 ori_scan++; |
| 423 } else { | 423 } else { |
| 424 int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_rati
o); | 424 int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_rati
o); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 continue; | 478 continue; |
| 479 } else { | 479 } else { |
| 480 if (dest_scan[3] == 0) { | 480 if (dest_scan[3] == 0) { |
| 481 dest_scan[3] = src_alpha_covered; | 481 dest_scan[3] = src_alpha_covered; |
| 482 *dest_scan ++ = m_Blue; | 482 *dest_scan ++ = m_Blue; |
| 483 *dest_scan ++ = m_Green; | 483 *dest_scan ++ = m_Green; |
| 484 *dest_scan = m_Red; | 484 *dest_scan = m_Red; |
| 485 dest_scan += 2; | 485 dest_scan += 2; |
| 486 continue; | 486 continue; |
| 487 } | 487 } |
| 488 FX_BYTE cover = cover_scan[col]; | 488 uint8_t cover = cover_scan[col]; |
| 489 dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, co
ver); | 489 dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, co
ver); |
| 490 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover); | 490 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover); |
| 491 dest_scan ++; | 491 dest_scan ++; |
| 492 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover); | 492 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover); |
| 493 dest_scan ++; | 493 dest_scan ++; |
| 494 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover); | 494 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover); |
| 495 dest_scan += 2; | 495 dest_scan += 2; |
| 496 } | 496 } |
| 497 } | 497 } |
| 498 return; | 498 return; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alph
a); | 537 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alph
a); |
| 538 } else { | 538 } else { |
| 539 int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha)
; | 539 int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha)
; |
| 540 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[
col]); | 540 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[
col]); |
| 541 dest_scan++; | 541 dest_scan++; |
| 542 } | 542 } |
| 543 } | 543 } |
| 544 } else { | 544 } else { |
| 545 int index = 0; | 545 int index = 0; |
| 546 if (m_pDevice->GetPalette() == NULL) { | 546 if (m_pDevice->GetPalette() == NULL) { |
| 547 index = ((FX_BYTE)m_Color == 0xff) ? 1 : 0; | 547 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
| 548 } else { | 548 } else { |
| 549 for (int i = 0; i < 2; i ++) | 549 for (int i = 0; i < 2; i ++) |
| 550 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { | 550 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { |
| 551 index = i; | 551 index = i; |
| 552 } | 552 } |
| 553 } | 553 } |
| 554 FX_LPBYTE dest_scan1 = dest_scan; | 554 FX_LPBYTE dest_scan1 = dest_scan; |
| 555 for (int col = col_start; col < col_end; col ++) { | 555 for (int col = col_start; col < col_end; col ++) { |
| 556 int src_alpha; | 556 int src_alpha; |
| 557 if (clip_scan) { | 557 if (clip_scan) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 575 int clip_left, int clip_right, FX_LPBYTE clip_scan, | 575 int clip_left, int clip_right, FX_LPBYTE clip_scan, |
| 576 FX_LPBYTE dest_extra_alpha_scan) | 576 FX_LPBYTE dest_extra_alpha_scan) |
| 577 { | 577 { |
| 578 ASSERT(!m_bRgbByteOrder); | 578 ASSERT(!m_bRgbByteOrder); |
| 579 ASSERT(!m_pDevice->IsCmykImage()); | 579 ASSERT(!m_pDevice->IsCmykImage()); |
| 580 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 580 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 581 int col_end = (span_left + span_len) < clip_right ? span_len : (clip_rig
ht - span_left); | 581 int col_end = (span_left + span_len) < clip_right ? span_len : (clip_rig
ht - span_left); |
| 582 dest_scan += col_start / 8; | 582 dest_scan += col_start / 8; |
| 583 int index = 0; | 583 int index = 0; |
| 584 if (m_pDevice->GetPalette() == NULL) { | 584 if (m_pDevice->GetPalette() == NULL) { |
| 585 index = ((FX_BYTE)m_Color == 0xff) ? 1 : 0; | 585 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
| 586 } else { | 586 } else { |
| 587 for (int i = 0; i < 2; i ++) | 587 for (int i = 0; i < 2; i ++) |
| 588 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { | 588 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { |
| 589 index = i; | 589 index = i; |
| 590 } | 590 } |
| 591 } | 591 } |
| 592 FX_LPBYTE dest_scan1 = dest_scan; | 592 FX_LPBYTE dest_scan1 = dest_scan; |
| 593 for (int col = col_start; col < col_end; col ++) { | 593 for (int col = col_start; col < col_end; col ++) { |
| 594 int src_alpha; | 594 int src_alpha; |
| 595 if (clip_scan) { | 595 if (clip_scan) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 630 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 631 } else { | 631 } else { |
| 632 src_alpha = m_Alpha * cover_scan[col] / 255; | 632 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 633 } | 633 } |
| 634 } | 634 } |
| 635 if (src_alpha) { | 635 if (src_alpha) { |
| 636 if (src_alpha == 255) { | 636 if (src_alpha == 255) { |
| 637 *dest_scan = m_Gray; | 637 *dest_scan = m_Gray; |
| 638 *dest_extra_alpha_scan = m_Alpha; | 638 *dest_extra_alpha_scan = m_Alpha; |
| 639 } else { | 639 } else { |
| 640 FX_BYTE dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - | 640 uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - |
| 641 (*dest_extra_alpha_scan) * src_alph
a / 255; | 641 (*dest_extra_alpha_scan) * src_alph
a / 255; |
| 642 *dest_extra_alpha_scan++ = dest_alpha; | 642 *dest_extra_alpha_scan++ = dest_alpha; |
| 643 int alpha_ratio = src_alpha * 255 / dest_alpha; | 643 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 644 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); | 644 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); |
| 645 dest_scan ++; | 645 dest_scan ++; |
| 646 continue; | 646 continue; |
| 647 } | 647 } |
| 648 } | 648 } |
| 649 dest_extra_alpha_scan ++; | 649 dest_extra_alpha_scan ++; |
| 650 dest_scan ++; | 650 dest_scan ++; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 if (clip_scan) { | 689 if (clip_scan) { |
| 690 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 690 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 691 } else { | 691 } else { |
| 692 src_alpha = m_Alpha * cover_scan[col] / 255; | 692 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 693 } | 693 } |
| 694 } | 694 } |
| 695 if (src_alpha) { | 695 if (src_alpha) { |
| 696 if (src_alpha == 255) { | 696 if (src_alpha == 255) { |
| 697 *(FX_DWORD*)dest_scan = m_Color; | 697 *(FX_DWORD*)dest_scan = m_Color; |
| 698 } else { | 698 } else { |
| 699 FX_BYTE dest_alpha = dest_scan[3] + src_alpha - dest_sca
n[3] * src_alpha / 255; | 699 uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_sca
n[3] * src_alpha / 255; |
| 700 dest_scan[3] = dest_alpha; | 700 dest_scan[3] = dest_alpha; |
| 701 int alpha_ratio = src_alpha * 255 / dest_alpha; | 701 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 702 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); | 702 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); |
| 703 dest_scan ++; | 703 dest_scan ++; |
| 704 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); | 704 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); |
| 705 dest_scan ++; | 705 dest_scan ++; |
| 706 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); | 706 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); |
| 707 dest_scan += 2; | 707 dest_scan += 2; |
| 708 continue; | 708 continue; |
| 709 } | 709 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 732 *(FX_DWORD*)dest_scan = m_Color; | 732 *(FX_DWORD*)dest_scan = m_Color; |
| 733 } else { | 733 } else { |
| 734 if (dest_scan[3] == 0) { | 734 if (dest_scan[3] == 0) { |
| 735 dest_scan[3] = src_alpha; | 735 dest_scan[3] = src_alpha; |
| 736 *dest_scan++ = m_Blue; | 736 *dest_scan++ = m_Blue; |
| 737 *dest_scan++ = m_Green; | 737 *dest_scan++ = m_Green; |
| 738 *dest_scan = m_Red; | 738 *dest_scan = m_Red; |
| 739 dest_scan += 2; | 739 dest_scan += 2; |
| 740 continue; | 740 continue; |
| 741 } | 741 } |
| 742 FX_BYTE dest_alpha = dest_scan[3] + src_alpha - dest_scan[3]
* src_alpha / 255; | 742 uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_scan[3]
* src_alpha / 255; |
| 743 dest_scan[3] = dest_alpha; | 743 dest_scan[3] = dest_alpha; |
| 744 int alpha_ratio = src_alpha * 255 / dest_alpha; | 744 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 745 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_rat
io); | 745 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_rat
io); |
| 746 dest_scan ++; | 746 dest_scan ++; |
| 747 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ra
tio); | 747 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ra
tio); |
| 748 dest_scan ++; | 748 dest_scan ++; |
| 749 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_rati
o); | 749 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_rati
o); |
| 750 dest_scan += 2; | 750 dest_scan += 2; |
| 751 continue; | 751 continue; |
| 752 } | 752 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 } | 805 } |
| 806 } else { | 806 } else { |
| 807 if (clip_scan) { | 807 if (clip_scan) { |
| 808 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 808 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 809 } else { | 809 } else { |
| 810 src_alpha = m_Alpha * cover_scan[col] / 255; | 810 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 811 } | 811 } |
| 812 } | 812 } |
| 813 if (src_alpha) { | 813 if (src_alpha) { |
| 814 if (src_alpha == 255) { | 814 if (src_alpha == 255) { |
| 815 *dest_scan++ = (FX_BYTE)m_Blue; | 815 *dest_scan++ = (uint8_t)m_Blue; |
| 816 *dest_scan++ = (FX_BYTE)m_Green; | 816 *dest_scan++ = (uint8_t)m_Green; |
| 817 *dest_scan++ = (FX_BYTE)m_Red; | 817 *dest_scan++ = (uint8_t)m_Red; |
| 818 *dest_extra_alpha_scan++ = (FX_BYTE)m_Alpha; | 818 *dest_extra_alpha_scan++ = (uint8_t)m_Alpha; |
| 819 continue; | 819 continue; |
| 820 } else { | 820 } else { |
| 821 FX_BYTE dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - | 821 uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - |
| 822 (*dest_extra_alpha_scan) * src_alph
a / 255; | 822 (*dest_extra_alpha_scan) * src_alph
a / 255; |
| 823 *dest_extra_alpha_scan++ = dest_alpha; | 823 *dest_extra_alpha_scan++ = dest_alpha; |
| 824 int alpha_ratio = src_alpha * 255 / dest_alpha; | 824 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 825 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); | 825 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); |
| 826 dest_scan ++; | 826 dest_scan ++; |
| 827 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); | 827 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); |
| 828 dest_scan ++; | 828 dest_scan ++; |
| 829 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); | 829 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); |
| 830 dest_scan ++; | 830 dest_scan ++; |
| 831 continue; | 831 continue; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 } else { | 895 } else { |
| 896 if (clip_scan) { | 896 if (clip_scan) { |
| 897 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 897 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 898 } else { | 898 } else { |
| 899 src_alpha = m_Alpha * cover_scan[col] / 255; | 899 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 900 } | 900 } |
| 901 } | 901 } |
| 902 if (src_alpha) { | 902 if (src_alpha) { |
| 903 if (src_alpha == 255) { | 903 if (src_alpha == 255) { |
| 904 *(FX_CMYK*)dest_scan = m_Color; | 904 *(FX_CMYK*)dest_scan = m_Color; |
| 905 *dest_extra_alpha_scan = (FX_BYTE)m_Alpha; | 905 *dest_extra_alpha_scan = (uint8_t)m_Alpha; |
| 906 } else { | 906 } else { |
| 907 FX_BYTE dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - | 907 uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - |
| 908 (*dest_extra_alpha_scan) * src_alph
a / 255; | 908 (*dest_extra_alpha_scan) * src_alph
a / 255; |
| 909 *dest_extra_alpha_scan++ = dest_alpha; | 909 *dest_extra_alpha_scan++ = dest_alpha; |
| 910 int alpha_ratio = src_alpha * 255 / dest_alpha; | 910 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 911 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); | 911 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); |
| 912 dest_scan ++; | 912 dest_scan ++; |
| 913 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); | 913 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); |
| 914 dest_scan ++; | 914 dest_scan ++; |
| 915 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); | 915 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); |
| 916 dest_scan ++; | 916 dest_scan ++; |
| 917 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); | 917 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1031 } else { | 1031 } else { |
| 1032 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 1032 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 1033 } | 1033 } |
| 1034 if (m_pDevice->GetBPP() == 8) { | 1034 if (m_pDevice->GetBPP() == 8) { |
| 1035 ASSERT(!m_bRgbByteOrder); | 1035 ASSERT(!m_bRgbByteOrder); |
| 1036 composite_span = &CFX_Renderer::CompositeSpanGray; | 1036 composite_span = &CFX_Renderer::CompositeSpanGray; |
| 1037 if (m_pDevice->IsAlphaMask()) { | 1037 if (m_pDevice->IsAlphaMask()) { |
| 1038 m_Gray = 255; | 1038 m_Gray = 255; |
| 1039 } else { | 1039 } else { |
| 1040 if (pIccTransform) { | 1040 if (pIccTransform) { |
| 1041 FX_BYTE gray; | 1041 uint8_t gray; |
| 1042 color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(col
or); | 1042 color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(col
or); |
| 1043 pIccModule->TranslateScanline(pIccTransform, &gray, (FX_LPCB
YTE)&color, 1); | 1043 pIccModule->TranslateScanline(pIccTransform, &gray, (FX_LPCB
YTE)&color, 1); |
| 1044 m_Gray = gray; | 1044 m_Gray = gray; |
| 1045 } else { | 1045 } else { |
| 1046 if (bObjectCMYK) { | 1046 if (bObjectCMYK) { |
| 1047 FX_BYTE r, g, b; | 1047 uint8_t r, g, b; |
| 1048 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMVal
ue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color), | 1048 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMVal
ue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color), |
| 1049 r, g, b); | 1049 r, g, b); |
| 1050 m_Gray = FXRGB2GRAY(r, g, b); | 1050 m_Gray = FXRGB2GRAY(r, g, b); |
| 1051 } else { | 1051 } else { |
| 1052 m_Gray = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FX
ARGB_B(color)); | 1052 m_Gray = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FX
ARGB_B(color)); |
| 1053 } | 1053 } |
| 1054 } | 1054 } |
| 1055 } | 1055 } |
| 1056 return TRUE; | 1056 return TRUE; |
| 1057 } | 1057 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1082 ((FX_LPBYTE)&m_Color)[3] = m_Alpha; | 1082 ((FX_LPBYTE)&m_Color)[3] = m_Alpha; |
| 1083 m_Red = ((FX_LPBYTE)&m_Color)[2]; | 1083 m_Red = ((FX_LPBYTE)&m_Color)[2]; |
| 1084 m_Green = ((FX_LPBYTE)&m_Color)[1]; | 1084 m_Green = ((FX_LPBYTE)&m_Color)[1]; |
| 1085 m_Blue = ((FX_LPBYTE)&m_Color)[0]; | 1085 m_Blue = ((FX_LPBYTE)&m_Color)[0]; |
| 1086 if (m_bRgbByteOrder) { | 1086 if (m_bRgbByteOrder) { |
| 1087 m_Color = FXARGB_TODIB(m_Color); | 1087 m_Color = FXARGB_TODIB(m_Color); |
| 1088 m_Color = FXARGB_TOBGRORDERDIB(m_Color); | 1088 m_Color = FXARGB_TOBGRORDERDIB(m_Color); |
| 1089 } | 1089 } |
| 1090 } else { | 1090 } else { |
| 1091 if (bObjectCMYK) { | 1091 if (bObjectCMYK) { |
| 1092 FX_BYTE r, g, b; | 1092 uint8_t r, g, b; |
| 1093 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(c
olor), FXSYS_GetYValue(color), FXSYS_GetKValue(color), | 1093 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(c
olor), FXSYS_GetYValue(color), FXSYS_GetKValue(color), |
| 1094 r, g, b); | 1094 r, g, b); |
| 1095 m_Color = FXARGB_MAKE(m_Alpha, r, g, b); | 1095 m_Color = FXARGB_MAKE(m_Alpha, r, g, b); |
| 1096 if (m_bRgbByteOrder) { | 1096 if (m_bRgbByteOrder) { |
| 1097 m_Color = FXARGB_TOBGRORDERDIB(m_Color); | 1097 m_Color = FXARGB_TOBGRORDERDIB(m_Color); |
| 1098 } else { | 1098 } else { |
| 1099 m_Color = FXARGB_TODIB(m_Color); | 1099 m_Color = FXARGB_TODIB(m_Color); |
| 1100 } | 1100 } |
| 1101 m_Red = r; | 1101 m_Red = r; |
| 1102 m_Green = g; | 1102 m_Green = g; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 return FALSE; | 1194 return FALSE; |
| 1195 } | 1195 } |
| 1196 } | 1196 } |
| 1197 return TRUE; | 1197 return TRUE; |
| 1198 } | 1198 } |
| 1199 void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) | 1199 void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) |
| 1200 { | 1200 { |
| 1201 if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight())
{ | 1201 if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight())
{ |
| 1202 return; | 1202 return; |
| 1203 } | 1203 } |
| 1204 FX_LPBYTE pos = (FX_BYTE*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() + x
* pBitmap->GetBPP() / 8; | 1204 FX_LPBYTE pos = (uint8_t*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() + x
* pBitmap->GetBPP() / 8; |
| 1205 if (pBitmap->GetFormat() == FXDIB_Argb) { | 1205 if (pBitmap->GetFormat() == FXDIB_Argb) { |
| 1206 FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb)); | 1206 FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb)); |
| 1207 } else { | 1207 } else { |
| 1208 int alpha = FXARGB_A(argb); | 1208 int alpha = FXARGB_A(argb); |
| 1209 pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255; | 1209 pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255; |
| 1210 pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255; | 1210 pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255; |
| 1211 pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255; | 1211 pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255; |
| 1212 } | 1212 } |
| 1213 } | 1213 } |
| 1214 void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap, int left, int top, int wid
th, int height, FX_ARGB argb) | 1214 void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap, int left, int top, int wid
th, int height, FX_ARGB argb) |
| 1215 { | 1215 { |
| 1216 int src_alpha = FXARGB_A(argb); | 1216 int src_alpha = FXARGB_A(argb); |
| 1217 if (src_alpha == 0) { | 1217 if (src_alpha == 0) { |
| 1218 return; | 1218 return; |
| 1219 } | 1219 } |
| 1220 FX_RECT rect(left, top, left + width, top + height); | 1220 FX_RECT rect(left, top, left + width, top + height); |
| 1221 rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()); | 1221 rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()); |
| 1222 width = rect.Width(); | 1222 width = rect.Width(); |
| 1223 int src_r = FXARGB_R(argb), src_g = FXARGB_G(argb), src_b = FXARGB_B(argb); | 1223 int src_r = FXARGB_R(argb), src_g = FXARGB_G(argb), src_b = FXARGB_B(argb); |
| 1224 int Bpp = pBitmap->GetBPP() / 8; | 1224 int Bpp = pBitmap->GetBPP() / 8; |
| 1225 FX_BOOL bAlpha = pBitmap->HasAlpha(); | 1225 FX_BOOL bAlpha = pBitmap->HasAlpha(); |
| 1226 int dib_argb = FXARGB_TOBGRORDERDIB(argb); | 1226 int dib_argb = FXARGB_TOBGRORDERDIB(argb); |
| 1227 FX_BYTE* pBuffer = pBitmap->GetBuffer(); | 1227 uint8_t* pBuffer = pBitmap->GetBuffer(); |
| 1228 if (src_alpha == 255) { | 1228 if (src_alpha == 255) { |
| 1229 for (int row = rect.top; row < rect.bottom; row ++) { | 1229 for (int row = rect.top; row < rect.bottom; row ++) { |
| 1230 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.lef
t * Bpp; | 1230 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.lef
t * Bpp; |
| 1231 if (Bpp == 4) { | 1231 if (Bpp == 4) { |
| 1232 FX_DWORD* scan = (FX_DWORD*)dest_scan; | 1232 FX_DWORD* scan = (FX_DWORD*)dest_scan; |
| 1233 for (int col = 0; col < width; col ++) { | 1233 for (int col = 0; col < width; col ++) { |
| 1234 *scan ++ = dib_argb; | 1234 *scan ++ = dib_argb; |
| 1235 } | 1235 } |
| 1236 } else { | 1236 } else { |
| 1237 for (int col = 0; col < width; col ++) { | 1237 for (int col = 0; col < width; col ++) { |
| 1238 *dest_scan ++ = src_r; | 1238 *dest_scan ++ = src_r; |
| 1239 *dest_scan ++ = src_g; | 1239 *dest_scan ++ = src_g; |
| 1240 *dest_scan ++ = src_b; | 1240 *dest_scan ++ = src_b; |
| 1241 } | 1241 } |
| 1242 } | 1242 } |
| 1243 } | 1243 } |
| 1244 return; | 1244 return; |
| 1245 } | 1245 } |
| 1246 src_r = FX_GAMMA(src_r); | 1246 src_r = FX_GAMMA(src_r); |
| 1247 src_g = FX_GAMMA(src_g); | 1247 src_g = FX_GAMMA(src_g); |
| 1248 src_b = FX_GAMMA(src_b); | 1248 src_b = FX_GAMMA(src_b); |
| 1249 for (int row = rect.top; row < rect.bottom; row ++) { | 1249 for (int row = rect.top; row < rect.bottom; row ++) { |
| 1250 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left *
Bpp; | 1250 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left *
Bpp; |
| 1251 if (bAlpha) { | 1251 if (bAlpha) { |
| 1252 for (int col = 0; col < width; col ++) { | 1252 for (int col = 0; col < width; col ++) { |
| 1253 FX_BYTE back_alpha = dest_scan[3]; | 1253 uint8_t back_alpha = dest_scan[3]; |
| 1254 if (back_alpha == 0) { | 1254 if (back_alpha == 0) { |
| 1255 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_
r, src_g, src_b)); | 1255 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_
r, src_g, src_b)); |
| 1256 dest_scan += 4; | 1256 dest_scan += 4; |
| 1257 continue; | 1257 continue; |
| 1258 } | 1258 } |
| 1259 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 1259 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 1260 dest_scan[3] = dest_alpha; | 1260 dest_scan[3] = dest_alpha; |
| 1261 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1261 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1262 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 1262 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 1263 dest_scan++; | 1263 dest_scan++; |
| 1264 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 1264 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 1265 dest_scan++; | 1265 dest_scan++; |
| 1266 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 1266 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 1267 dest_scan += 2; | 1267 dest_scan += 2; |
| 1268 } | 1268 } |
| 1269 } else { | 1269 } else { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1288 return; | 1288 return; |
| 1289 } | 1289 } |
| 1290 pBitmap->GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetW
idth(), pSrcBitmap->GetHeight(), src_left, src_top, NULL); | 1290 pBitmap->GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetW
idth(), pSrcBitmap->GetHeight(), src_left, src_top, NULL); |
| 1291 if (width == 0 || height == 0) { | 1291 if (width == 0 || height == 0) { |
| 1292 return; | 1292 return; |
| 1293 } | 1293 } |
| 1294 int Bpp = pBitmap->GetBPP() / 8; | 1294 int Bpp = pBitmap->GetBPP() / 8; |
| 1295 FXDIB_Format dest_format = pBitmap->GetFormat(); | 1295 FXDIB_Format dest_format = pBitmap->GetFormat(); |
| 1296 FXDIB_Format src_format = pSrcBitmap->GetFormat(); | 1296 FXDIB_Format src_format = pSrcBitmap->GetFormat(); |
| 1297 int pitch = pBitmap->GetPitch(); | 1297 int pitch = pBitmap->GetPitch(); |
| 1298 FX_BYTE* buffer = pBitmap->GetBuffer(); | 1298 uint8_t* buffer = pBitmap->GetBuffer(); |
| 1299 if (dest_format == src_format) { | 1299 if (dest_format == src_format) { |
| 1300 for (int row = 0; row < height; row ++) { | 1300 for (int row = 0; row < height; row ++) { |
| 1301 FX_LPBYTE dest_scan = buffer + (dest_top + row) * pitch + dest_left
* Bpp; | 1301 FX_LPBYTE dest_scan = buffer + (dest_top + row) * pitch + dest_left
* Bpp; |
| 1302 FX_LPBYTE src_scan = (FX_LPBYTE)pSrcBitmap->GetScanline(src_top + ro
w) + src_left * Bpp; | 1302 FX_LPBYTE src_scan = (FX_LPBYTE)pSrcBitmap->GetScanline(src_top + ro
w) + src_left * Bpp; |
| 1303 if (Bpp == 4) { | 1303 if (Bpp == 4) { |
| 1304 for (int col = 0; col < width; col ++) { | 1304 for (int col = 0; col < width; col ++) { |
| 1305 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_scan[3], src_scan[0
], src_scan[1], src_scan[2])); | 1305 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_scan[3], src_scan[0
], src_scan[1], src_scan[2])); |
| 1306 dest_scan += 4; | 1306 dest_scan += 4; |
| 1307 src_scan += 4; | 1307 src_scan += 4; |
| 1308 } | 1308 } |
| 1309 } else { | 1309 } else { |
| 1310 for (int col = 0; col < width; col ++) { | 1310 for (int col = 0; col < width; col ++) { |
| 1311 *dest_scan++ = src_scan[2]; | 1311 *dest_scan++ = src_scan[2]; |
| 1312 *dest_scan++ = src_scan[1]; | 1312 *dest_scan++ = src_scan[1]; |
| 1313 *dest_scan++ = src_scan[0]; | 1313 *dest_scan++ = src_scan[0]; |
| 1314 src_scan += 3; | 1314 src_scan += 3; |
| 1315 } | 1315 } |
| 1316 } | 1316 } |
| 1317 } | 1317 } |
| 1318 return; | 1318 return; |
| 1319 } | 1319 } |
| 1320 FX_LPBYTE dest_buf = buffer + dest_top * pitch + dest_left * Bpp; | 1320 FX_LPBYTE dest_buf = buffer + dest_top * pitch + dest_left * Bpp; |
| 1321 if (dest_format == FXDIB_Rgb) { | 1321 if (dest_format == FXDIB_Rgb) { |
| 1322 if (src_format == FXDIB_Rgb32) { | 1322 if (src_format == FXDIB_Rgb32) { |
| 1323 for (int row = 0; row < height; row ++) { | 1323 for (int row = 0; row < height; row ++) { |
| 1324 FX_LPBYTE dest_scan = dest_buf + row * pitch; | 1324 FX_LPBYTE dest_scan = dest_buf + row * pitch; |
| 1325 FX_LPBYTE src_scan = (FX_BYTE*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 4; | 1325 FX_LPBYTE src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 4; |
| 1326 for (int col = 0; col < width; col ++) { | 1326 for (int col = 0; col < width; col ++) { |
| 1327 *dest_scan++ = src_scan[2]; | 1327 *dest_scan++ = src_scan[2]; |
| 1328 *dest_scan++ = src_scan[1]; | 1328 *dest_scan++ = src_scan[1]; |
| 1329 *dest_scan++ = src_scan[0]; | 1329 *dest_scan++ = src_scan[0]; |
| 1330 src_scan += 4; | 1330 src_scan += 4; |
| 1331 } | 1331 } |
| 1332 } | 1332 } |
| 1333 } else { | 1333 } else { |
| 1334 ASSERT(FALSE); | 1334 ASSERT(FALSE); |
| 1335 } | 1335 } |
| 1336 } else if (dest_format == FXDIB_Argb || dest_format == FXDIB_Rgb32) { | 1336 } else if (dest_format == FXDIB_Argb || dest_format == FXDIB_Rgb32) { |
| 1337 if (src_format == FXDIB_Rgb) { | 1337 if (src_format == FXDIB_Rgb) { |
| 1338 for (int row = 0; row < height; row ++) { | 1338 for (int row = 0; row < height; row ++) { |
| 1339 FX_BYTE* dest_scan = (FX_BYTE*)(dest_buf + row * pitch); | 1339 uint8_t* dest_scan = (uint8_t*)(dest_buf + row * pitch); |
| 1340 FX_LPBYTE src_scan = (FX_BYTE*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 3; | 1340 FX_LPBYTE src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 3; |
| 1341 if (src_format == FXDIB_Argb) { | 1341 if (src_format == FXDIB_Argb) { |
| 1342 for (int col = 0; col < width; col ++) { | 1342 for (int col = 0; col < width; col ++) { |
| 1343 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, FX_GAMMA(src_
scan[0]), FX_GAMMA(src_scan[1]), FX_GAMMA(src_scan[2]))); | 1343 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, FX_GAMMA(src_
scan[0]), FX_GAMMA(src_scan[1]), FX_GAMMA(src_scan[2]))); |
| 1344 dest_scan += 4; | 1344 dest_scan += 4; |
| 1345 src_scan += 3; | 1345 src_scan += 3; |
| 1346 } | 1346 } |
| 1347 } else { | 1347 } else { |
| 1348 for (int col = 0; col < width; col ++) { | 1348 for (int col = 0; col < width; col ++) { |
| 1349 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0],
src_scan[1], src_scan[2])); | 1349 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0],
src_scan[1], src_scan[2])); |
| 1350 dest_scan += 4; | 1350 dest_scan += 4; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1361 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_
scan[1], src_scan[2])); | 1361 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_
scan[1], src_scan[2])); |
| 1362 src_scan += 4; | 1362 src_scan += 4; |
| 1363 dest_scan += 4; | 1363 dest_scan += 4; |
| 1364 } | 1364 } |
| 1365 } | 1365 } |
| 1366 } | 1366 } |
| 1367 } else { | 1367 } else { |
| 1368 ASSERT(FALSE); | 1368 ASSERT(FALSE); |
| 1369 } | 1369 } |
| 1370 } | 1370 } |
| 1371 FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, FX_BYTE alpha) | 1371 FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, uint8_t alpha) |
| 1372 { | 1372 { |
| 1373 FX_BYTE r, g, b; | 1373 uint8_t r, g, b; |
| 1374 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYV
alue(cmyk), FXSYS_GetKValue(cmyk), | 1374 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYV
alue(cmyk), FXSYS_GetKValue(cmyk), |
| 1375 r, g, b); | 1375 r, g, b); |
| 1376 return ArgbEncode(alpha, r, g, b); | 1376 return ArgbEncode(alpha, r, g, b); |
| 1377 } | 1377 } |
| 1378 FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice, int x, int y, FX_DWORD color, int al
pha_flag, void* pIccTransform) | 1378 FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice, int x, int y, FX_DWORD color, int al
pha_flag, void* pIccTransform) |
| 1379 { | 1379 { |
| 1380 FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag); | 1380 FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag); |
| 1381 int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color); | 1381 int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color); |
| 1382 if (pIccTransform) { | 1382 if (pIccTransform) { |
| 1383 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->Ge
tIccModule(); | 1383 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->Ge
tIccModule(); |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1622 } | 1622 } |
| 1623 SetDeviceDriver(pDriver); | 1623 SetDeviceDriver(pDriver); |
| 1624 return TRUE; | 1624 return TRUE; |
| 1625 } | 1625 } |
| 1626 CFX_FxgeDevice::~CFX_FxgeDevice() | 1626 CFX_FxgeDevice::~CFX_FxgeDevice() |
| 1627 { | 1627 { |
| 1628 if (m_bOwnedBitmap && GetBitmap()) { | 1628 if (m_bOwnedBitmap && GetBitmap()) { |
| 1629 delete GetBitmap(); | 1629 delete GetBitmap(); |
| 1630 } | 1630 } |
| 1631 } | 1631 } |
| OLD | NEW |