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 |