| 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 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 } | 395 } |
| 396 if (m_bRgbByteOrder) { | 396 if (m_bRgbByteOrder) { |
| 397 if (Bpp == 4 && bDestAlpha) { | 397 if (Bpp == 4 && bDestAlpha) { |
| 398 for (int col = col_start; col < col_end; col ++) { | 398 for (int col = col_start; col < col_end; col ++) { |
| 399 int src_alpha; | 399 int src_alpha; |
| 400 if (clip_scan) { | 400 if (clip_scan) { |
| 401 src_alpha = m_Alpha * clip_scan[col] / 255; | 401 src_alpha = m_Alpha * clip_scan[col] / 255; |
| 402 } else { | 402 } else { |
| 403 src_alpha = m_Alpha; | 403 src_alpha = m_Alpha; |
| 404 } | 404 } |
| 405 FX_BYTE dest_alpha = ori_scan[3] + src_alpha - ori_scan[3] *
src_alpha / 255; | 405 uint8_t dest_alpha = ori_scan[3] + src_alpha - ori_scan[3] *
src_alpha / 255; |
| 406 dest_scan[3] = dest_alpha; | 406 dest_scan[3] = dest_alpha; |
| 407 int alpha_ratio = src_alpha * 255 / dest_alpha; | 407 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 408 if (m_bFullCover) { | 408 if (m_bFullCover) { |
| 409 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alp
ha_ratio); | 409 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alp
ha_ratio); |
| 410 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, a
lpha_ratio); | 410 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, a
lpha_ratio); |
| 411 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, al
pha_ratio); | 411 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, al
pha_ratio); |
| 412 dest_scan++; | 412 dest_scan++; |
| 413 ori_scan++; | 413 ori_scan++; |
| 414 } else { | 414 } else { |
| 415 int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_rati
o); | 415 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... |
| 469 continue; | 469 continue; |
| 470 } else { | 470 } else { |
| 471 if (dest_scan[3] == 0) { | 471 if (dest_scan[3] == 0) { |
| 472 dest_scan[3] = src_alpha_covered; | 472 dest_scan[3] = src_alpha_covered; |
| 473 *dest_scan ++ = m_Blue; | 473 *dest_scan ++ = m_Blue; |
| 474 *dest_scan ++ = m_Green; | 474 *dest_scan ++ = m_Green; |
| 475 *dest_scan = m_Red; | 475 *dest_scan = m_Red; |
| 476 dest_scan += 2; | 476 dest_scan += 2; |
| 477 continue; | 477 continue; |
| 478 } | 478 } |
| 479 FX_BYTE cover = cover_scan[col]; | 479 uint8_t cover = cover_scan[col]; |
| 480 dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, co
ver); | 480 dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, co
ver); |
| 481 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover); | 481 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover); |
| 482 dest_scan ++; | 482 dest_scan ++; |
| 483 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover); | 483 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover); |
| 484 dest_scan ++; | 484 dest_scan ++; |
| 485 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover); | 485 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover); |
| 486 dest_scan += 2; | 486 dest_scan += 2; |
| 487 } | 487 } |
| 488 } | 488 } |
| 489 return; | 489 return; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alph
a); | 528 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alph
a); |
| 529 } else { | 529 } else { |
| 530 int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha)
; | 530 int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha)
; |
| 531 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[
col]); | 531 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[
col]); |
| 532 dest_scan++; | 532 dest_scan++; |
| 533 } | 533 } |
| 534 } | 534 } |
| 535 } else { | 535 } else { |
| 536 int index = 0; | 536 int index = 0; |
| 537 if (m_pDevice->GetPalette() == NULL) { | 537 if (m_pDevice->GetPalette() == NULL) { |
| 538 index = ((FX_BYTE)m_Color == 0xff) ? 1 : 0; | 538 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
| 539 } else { | 539 } else { |
| 540 for (int i = 0; i < 2; i ++) | 540 for (int i = 0; i < 2; i ++) |
| 541 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { | 541 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { |
| 542 index = i; | 542 index = i; |
| 543 } | 543 } |
| 544 } | 544 } |
| 545 FX_LPBYTE dest_scan1 = dest_scan; | 545 FX_LPBYTE dest_scan1 = dest_scan; |
| 546 for (int col = col_start; col < col_end; col ++) { | 546 for (int col = col_start; col < col_end; col ++) { |
| 547 int src_alpha; | 547 int src_alpha; |
| 548 if (clip_scan) { | 548 if (clip_scan) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 566 int clip_left, int clip_right, FX_LPBYTE clip_scan, | 566 int clip_left, int clip_right, FX_LPBYTE clip_scan, |
| 567 FX_LPBYTE dest_extra_alpha_scan) | 567 FX_LPBYTE dest_extra_alpha_scan) |
| 568 { | 568 { |
| 569 ASSERT(!m_bRgbByteOrder); | 569 ASSERT(!m_bRgbByteOrder); |
| 570 ASSERT(!m_pDevice->IsCmykImage()); | 570 ASSERT(!m_pDevice->IsCmykImage()); |
| 571 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 571 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 572 int col_end = (span_left + span_len) < clip_right ? span_len : (clip_rig
ht - span_left); | 572 int col_end = (span_left + span_len) < clip_right ? span_len : (clip_rig
ht - span_left); |
| 573 dest_scan += col_start / 8; | 573 dest_scan += col_start / 8; |
| 574 int index = 0; | 574 int index = 0; |
| 575 if (m_pDevice->GetPalette() == NULL) { | 575 if (m_pDevice->GetPalette() == NULL) { |
| 576 index = ((FX_BYTE)m_Color == 0xff) ? 1 : 0; | 576 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
| 577 } else { | 577 } else { |
| 578 for (int i = 0; i < 2; i ++) | 578 for (int i = 0; i < 2; i ++) |
| 579 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { | 579 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { |
| 580 index = i; | 580 index = i; |
| 581 } | 581 } |
| 582 } | 582 } |
| 583 FX_LPBYTE dest_scan1 = dest_scan; | 583 FX_LPBYTE dest_scan1 = dest_scan; |
| 584 for (int col = col_start; col < col_end; col ++) { | 584 for (int col = col_start; col < col_end; col ++) { |
| 585 int src_alpha; | 585 int src_alpha; |
| 586 if (clip_scan) { | 586 if (clip_scan) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 621 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 622 } else { | 622 } else { |
| 623 src_alpha = m_Alpha * cover_scan[col] / 255; | 623 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 624 } | 624 } |
| 625 } | 625 } |
| 626 if (src_alpha) { | 626 if (src_alpha) { |
| 627 if (src_alpha == 255) { | 627 if (src_alpha == 255) { |
| 628 *dest_scan = m_Gray; | 628 *dest_scan = m_Gray; |
| 629 *dest_extra_alpha_scan = m_Alpha; | 629 *dest_extra_alpha_scan = m_Alpha; |
| 630 } else { | 630 } else { |
| 631 FX_BYTE dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - | 631 uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - |
| 632 (*dest_extra_alpha_scan) * src_alph
a / 255; | 632 (*dest_extra_alpha_scan) * src_alph
a / 255; |
| 633 *dest_extra_alpha_scan++ = dest_alpha; | 633 *dest_extra_alpha_scan++ = dest_alpha; |
| 634 int alpha_ratio = src_alpha * 255 / dest_alpha; | 634 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 635 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); | 635 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); |
| 636 dest_scan ++; | 636 dest_scan ++; |
| 637 continue; | 637 continue; |
| 638 } | 638 } |
| 639 } | 639 } |
| 640 dest_extra_alpha_scan ++; | 640 dest_extra_alpha_scan ++; |
| 641 dest_scan ++; | 641 dest_scan ++; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 680 if (clip_scan) { | 680 if (clip_scan) { |
| 681 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 681 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 682 } else { | 682 } else { |
| 683 src_alpha = m_Alpha * cover_scan[col] / 255; | 683 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 684 } | 684 } |
| 685 } | 685 } |
| 686 if (src_alpha) { | 686 if (src_alpha) { |
| 687 if (src_alpha == 255) { | 687 if (src_alpha == 255) { |
| 688 *(FX_DWORD*)dest_scan = m_Color; | 688 *(FX_DWORD*)dest_scan = m_Color; |
| 689 } else { | 689 } else { |
| 690 FX_BYTE dest_alpha = dest_scan[3] + src_alpha - dest_sca
n[3] * src_alpha / 255; | 690 uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_sca
n[3] * src_alpha / 255; |
| 691 dest_scan[3] = dest_alpha; | 691 dest_scan[3] = dest_alpha; |
| 692 int alpha_ratio = src_alpha * 255 / dest_alpha; | 692 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 693 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); | 693 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); |
| 694 dest_scan ++; | 694 dest_scan ++; |
| 695 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); | 695 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); |
| 696 dest_scan ++; | 696 dest_scan ++; |
| 697 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); | 697 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); |
| 698 dest_scan += 2; | 698 dest_scan += 2; |
| 699 continue; | 699 continue; |
| 700 } | 700 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 723 *(FX_DWORD*)dest_scan = m_Color; | 723 *(FX_DWORD*)dest_scan = m_Color; |
| 724 } else { | 724 } else { |
| 725 if (dest_scan[3] == 0) { | 725 if (dest_scan[3] == 0) { |
| 726 dest_scan[3] = src_alpha; | 726 dest_scan[3] = src_alpha; |
| 727 *dest_scan++ = m_Blue; | 727 *dest_scan++ = m_Blue; |
| 728 *dest_scan++ = m_Green; | 728 *dest_scan++ = m_Green; |
| 729 *dest_scan = m_Red; | 729 *dest_scan = m_Red; |
| 730 dest_scan += 2; | 730 dest_scan += 2; |
| 731 continue; | 731 continue; |
| 732 } | 732 } |
| 733 FX_BYTE dest_alpha = dest_scan[3] + src_alpha - dest_scan[3]
* src_alpha / 255; | 733 uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_scan[3]
* src_alpha / 255; |
| 734 dest_scan[3] = dest_alpha; | 734 dest_scan[3] = dest_alpha; |
| 735 int alpha_ratio = src_alpha * 255 / dest_alpha; | 735 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 736 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_rat
io); | 736 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_rat
io); |
| 737 dest_scan ++; | 737 dest_scan ++; |
| 738 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ra
tio); | 738 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ra
tio); |
| 739 dest_scan ++; | 739 dest_scan ++; |
| 740 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_rati
o); | 740 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_rati
o); |
| 741 dest_scan += 2; | 741 dest_scan += 2; |
| 742 continue; | 742 continue; |
| 743 } | 743 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 } | 796 } |
| 797 } else { | 797 } else { |
| 798 if (clip_scan) { | 798 if (clip_scan) { |
| 799 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 799 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 800 } else { | 800 } else { |
| 801 src_alpha = m_Alpha * cover_scan[col] / 255; | 801 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 802 } | 802 } |
| 803 } | 803 } |
| 804 if (src_alpha) { | 804 if (src_alpha) { |
| 805 if (src_alpha == 255) { | 805 if (src_alpha == 255) { |
| 806 *dest_scan++ = (FX_BYTE)m_Blue; | 806 *dest_scan++ = (uint8_t)m_Blue; |
| 807 *dest_scan++ = (FX_BYTE)m_Green; | 807 *dest_scan++ = (uint8_t)m_Green; |
| 808 *dest_scan++ = (FX_BYTE)m_Red; | 808 *dest_scan++ = (uint8_t)m_Red; |
| 809 *dest_extra_alpha_scan++ = (FX_BYTE)m_Alpha; | 809 *dest_extra_alpha_scan++ = (uint8_t)m_Alpha; |
| 810 continue; | 810 continue; |
| 811 } else { | 811 } else { |
| 812 FX_BYTE dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - | 812 uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - |
| 813 (*dest_extra_alpha_scan) * src_alph
a / 255; | 813 (*dest_extra_alpha_scan) * src_alph
a / 255; |
| 814 *dest_extra_alpha_scan++ = dest_alpha; | 814 *dest_extra_alpha_scan++ = dest_alpha; |
| 815 int alpha_ratio = src_alpha * 255 / dest_alpha; | 815 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 816 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); | 816 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); |
| 817 dest_scan ++; | 817 dest_scan ++; |
| 818 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); | 818 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); |
| 819 dest_scan ++; | 819 dest_scan ++; |
| 820 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); | 820 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); |
| 821 dest_scan ++; | 821 dest_scan ++; |
| 822 continue; | 822 continue; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 } else { | 886 } else { |
| 887 if (clip_scan) { | 887 if (clip_scan) { |
| 888 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; | 888 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] /
255 / 255; |
| 889 } else { | 889 } else { |
| 890 src_alpha = m_Alpha * cover_scan[col] / 255; | 890 src_alpha = m_Alpha * cover_scan[col] / 255; |
| 891 } | 891 } |
| 892 } | 892 } |
| 893 if (src_alpha) { | 893 if (src_alpha) { |
| 894 if (src_alpha == 255) { | 894 if (src_alpha == 255) { |
| 895 *(FX_CMYK*)dest_scan = m_Color; | 895 *(FX_CMYK*)dest_scan = m_Color; |
| 896 *dest_extra_alpha_scan = (FX_BYTE)m_Alpha; | 896 *dest_extra_alpha_scan = (uint8_t)m_Alpha; |
| 897 } else { | 897 } else { |
| 898 FX_BYTE dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - | 898 uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alph
a - |
| 899 (*dest_extra_alpha_scan) * src_alph
a / 255; | 899 (*dest_extra_alpha_scan) * src_alph
a / 255; |
| 900 *dest_extra_alpha_scan++ = dest_alpha; | 900 *dest_extra_alpha_scan++ = dest_alpha; |
| 901 int alpha_ratio = src_alpha * 255 / dest_alpha; | 901 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 902 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); | 902 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_
ratio); |
| 903 dest_scan ++; | 903 dest_scan ++; |
| 904 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); | 904 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alph
a_ratio); |
| 905 dest_scan ++; | 905 dest_scan ++; |
| 906 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); | 906 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha
_ratio); |
| 907 dest_scan ++; | 907 dest_scan ++; |
| 908 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); | 908 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha
_ratio); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 } else { | 1022 } else { |
| 1023 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 1023 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 1024 } | 1024 } |
| 1025 if (m_pDevice->GetBPP() == 8) { | 1025 if (m_pDevice->GetBPP() == 8) { |
| 1026 ASSERT(!m_bRgbByteOrder); | 1026 ASSERT(!m_bRgbByteOrder); |
| 1027 composite_span = &CFX_Renderer::CompositeSpanGray; | 1027 composite_span = &CFX_Renderer::CompositeSpanGray; |
| 1028 if (m_pDevice->IsAlphaMask()) { | 1028 if (m_pDevice->IsAlphaMask()) { |
| 1029 m_Gray = 255; | 1029 m_Gray = 255; |
| 1030 } else { | 1030 } else { |
| 1031 if (pIccTransform) { | 1031 if (pIccTransform) { |
| 1032 FX_BYTE gray; | 1032 uint8_t gray; |
| 1033 color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(col
or); | 1033 color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(col
or); |
| 1034 pIccModule->TranslateScanline(pIccTransform, &gray, (FX_LPCB
YTE)&color, 1); | 1034 pIccModule->TranslateScanline(pIccTransform, &gray, (FX_LPCB
YTE)&color, 1); |
| 1035 m_Gray = gray; | 1035 m_Gray = gray; |
| 1036 } else { | 1036 } else { |
| 1037 if (bObjectCMYK) { | 1037 if (bObjectCMYK) { |
| 1038 FX_BYTE r, g, b; | 1038 uint8_t r, g, b; |
| 1039 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMVal
ue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color), | 1039 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMVal
ue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color), |
| 1040 r, g, b); | 1040 r, g, b); |
| 1041 m_Gray = FXRGB2GRAY(r, g, b); | 1041 m_Gray = FXRGB2GRAY(r, g, b); |
| 1042 } else { | 1042 } else { |
| 1043 m_Gray = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FX
ARGB_B(color)); | 1043 m_Gray = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FX
ARGB_B(color)); |
| 1044 } | 1044 } |
| 1045 } | 1045 } |
| 1046 } | 1046 } |
| 1047 return TRUE; | 1047 return TRUE; |
| 1048 } | 1048 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1073 ((FX_LPBYTE)&m_Color)[3] = m_Alpha; | 1073 ((FX_LPBYTE)&m_Color)[3] = m_Alpha; |
| 1074 m_Red = ((FX_LPBYTE)&m_Color)[2]; | 1074 m_Red = ((FX_LPBYTE)&m_Color)[2]; |
| 1075 m_Green = ((FX_LPBYTE)&m_Color)[1]; | 1075 m_Green = ((FX_LPBYTE)&m_Color)[1]; |
| 1076 m_Blue = ((FX_LPBYTE)&m_Color)[0]; | 1076 m_Blue = ((FX_LPBYTE)&m_Color)[0]; |
| 1077 if (m_bRgbByteOrder) { | 1077 if (m_bRgbByteOrder) { |
| 1078 m_Color = FXARGB_TODIB(m_Color); | 1078 m_Color = FXARGB_TODIB(m_Color); |
| 1079 m_Color = FXARGB_TOBGRORDERDIB(m_Color); | 1079 m_Color = FXARGB_TOBGRORDERDIB(m_Color); |
| 1080 } | 1080 } |
| 1081 } else { | 1081 } else { |
| 1082 if (bObjectCMYK) { | 1082 if (bObjectCMYK) { |
| 1083 FX_BYTE r, g, b; | 1083 uint8_t r, g, b; |
| 1084 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(c
olor), FXSYS_GetYValue(color), FXSYS_GetKValue(color), | 1084 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(c
olor), FXSYS_GetYValue(color), FXSYS_GetKValue(color), |
| 1085 r, g, b); | 1085 r, g, b); |
| 1086 m_Color = FXARGB_MAKE(m_Alpha, r, g, b); | 1086 m_Color = FXARGB_MAKE(m_Alpha, r, g, b); |
| 1087 if (m_bRgbByteOrder) { | 1087 if (m_bRgbByteOrder) { |
| 1088 m_Color = FXARGB_TOBGRORDERDIB(m_Color); | 1088 m_Color = FXARGB_TOBGRORDERDIB(m_Color); |
| 1089 } else { | 1089 } else { |
| 1090 m_Color = FXARGB_TODIB(m_Color); | 1090 m_Color = FXARGB_TODIB(m_Color); |
| 1091 } | 1091 } |
| 1092 m_Red = r; | 1092 m_Red = r; |
| 1093 m_Green = g; | 1093 m_Green = g; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1185 return FALSE; | 1185 return FALSE; |
| 1186 } | 1186 } |
| 1187 } | 1187 } |
| 1188 return TRUE; | 1188 return TRUE; |
| 1189 } | 1189 } |
| 1190 void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) | 1190 void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) |
| 1191 { | 1191 { |
| 1192 if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight())
{ | 1192 if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight())
{ |
| 1193 return; | 1193 return; |
| 1194 } | 1194 } |
| 1195 FX_LPBYTE pos = (FX_BYTE*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() + x
* pBitmap->GetBPP() / 8; | 1195 FX_LPBYTE pos = (uint8_t*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() + x
* pBitmap->GetBPP() / 8; |
| 1196 if (pBitmap->GetFormat() == FXDIB_Argb) { | 1196 if (pBitmap->GetFormat() == FXDIB_Argb) { |
| 1197 FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb)); | 1197 FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb)); |
| 1198 } else { | 1198 } else { |
| 1199 int alpha = FXARGB_A(argb); | 1199 int alpha = FXARGB_A(argb); |
| 1200 pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255; | 1200 pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255; |
| 1201 pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255; | 1201 pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255; |
| 1202 pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255; | 1202 pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255; |
| 1203 } | 1203 } |
| 1204 } | 1204 } |
| 1205 void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap, int left, int top, int wid
th, int height, FX_ARGB argb) | 1205 void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap, int left, int top, int wid
th, int height, FX_ARGB argb) |
| 1206 { | 1206 { |
| 1207 int src_alpha = FXARGB_A(argb); | 1207 int src_alpha = FXARGB_A(argb); |
| 1208 if (src_alpha == 0) { | 1208 if (src_alpha == 0) { |
| 1209 return; | 1209 return; |
| 1210 } | 1210 } |
| 1211 FX_RECT rect(left, top, left + width, top + height); | 1211 FX_RECT rect(left, top, left + width, top + height); |
| 1212 rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()); | 1212 rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()); |
| 1213 width = rect.Width(); | 1213 width = rect.Width(); |
| 1214 int src_r = FXARGB_R(argb), src_g = FXARGB_G(argb), src_b = FXARGB_B(argb); | 1214 int src_r = FXARGB_R(argb), src_g = FXARGB_G(argb), src_b = FXARGB_B(argb); |
| 1215 int Bpp = pBitmap->GetBPP() / 8; | 1215 int Bpp = pBitmap->GetBPP() / 8; |
| 1216 FX_BOOL bAlpha = pBitmap->HasAlpha(); | 1216 FX_BOOL bAlpha = pBitmap->HasAlpha(); |
| 1217 int dib_argb = FXARGB_TOBGRORDERDIB(argb); | 1217 int dib_argb = FXARGB_TOBGRORDERDIB(argb); |
| 1218 FX_BYTE* pBuffer = pBitmap->GetBuffer(); | 1218 uint8_t* pBuffer = pBitmap->GetBuffer(); |
| 1219 if (src_alpha == 255) { | 1219 if (src_alpha == 255) { |
| 1220 for (int row = rect.top; row < rect.bottom; row ++) { | 1220 for (int row = rect.top; row < rect.bottom; row ++) { |
| 1221 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.lef
t * Bpp; | 1221 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.lef
t * Bpp; |
| 1222 if (Bpp == 4) { | 1222 if (Bpp == 4) { |
| 1223 FX_DWORD* scan = (FX_DWORD*)dest_scan; | 1223 FX_DWORD* scan = (FX_DWORD*)dest_scan; |
| 1224 for (int col = 0; col < width; col ++) { | 1224 for (int col = 0; col < width; col ++) { |
| 1225 *scan ++ = dib_argb; | 1225 *scan ++ = dib_argb; |
| 1226 } | 1226 } |
| 1227 } else { | 1227 } else { |
| 1228 for (int col = 0; col < width; col ++) { | 1228 for (int col = 0; col < width; col ++) { |
| 1229 *dest_scan ++ = src_r; | 1229 *dest_scan ++ = src_r; |
| 1230 *dest_scan ++ = src_g; | 1230 *dest_scan ++ = src_g; |
| 1231 *dest_scan ++ = src_b; | 1231 *dest_scan ++ = src_b; |
| 1232 } | 1232 } |
| 1233 } | 1233 } |
| 1234 } | 1234 } |
| 1235 return; | 1235 return; |
| 1236 } | 1236 } |
| 1237 src_r = FX_GAMMA(src_r); | 1237 src_r = FX_GAMMA(src_r); |
| 1238 src_g = FX_GAMMA(src_g); | 1238 src_g = FX_GAMMA(src_g); |
| 1239 src_b = FX_GAMMA(src_b); | 1239 src_b = FX_GAMMA(src_b); |
| 1240 for (int row = rect.top; row < rect.bottom; row ++) { | 1240 for (int row = rect.top; row < rect.bottom; row ++) { |
| 1241 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left *
Bpp; | 1241 FX_LPBYTE dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left *
Bpp; |
| 1242 if (bAlpha) { | 1242 if (bAlpha) { |
| 1243 for (int col = 0; col < width; col ++) { | 1243 for (int col = 0; col < width; col ++) { |
| 1244 FX_BYTE back_alpha = dest_scan[3]; | 1244 uint8_t back_alpha = dest_scan[3]; |
| 1245 if (back_alpha == 0) { | 1245 if (back_alpha == 0) { |
| 1246 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_
r, src_g, src_b)); | 1246 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_
r, src_g, src_b)); |
| 1247 dest_scan += 4; | 1247 dest_scan += 4; |
| 1248 continue; | 1248 continue; |
| 1249 } | 1249 } |
| 1250 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 1250 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 1251 dest_scan[3] = dest_alpha; | 1251 dest_scan[3] = dest_alpha; |
| 1252 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1252 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1253 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 1253 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 1254 dest_scan++; | 1254 dest_scan++; |
| 1255 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 1255 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 1256 dest_scan++; | 1256 dest_scan++; |
| 1257 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 1257 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 1258 dest_scan += 2; | 1258 dest_scan += 2; |
| 1259 } | 1259 } |
| 1260 } else { | 1260 } else { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1279 return; | 1279 return; |
| 1280 } | 1280 } |
| 1281 pBitmap->GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetW
idth(), pSrcBitmap->GetHeight(), src_left, src_top, NULL); | 1281 pBitmap->GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetW
idth(), pSrcBitmap->GetHeight(), src_left, src_top, NULL); |
| 1282 if (width == 0 || height == 0) { | 1282 if (width == 0 || height == 0) { |
| 1283 return; | 1283 return; |
| 1284 } | 1284 } |
| 1285 int Bpp = pBitmap->GetBPP() / 8; | 1285 int Bpp = pBitmap->GetBPP() / 8; |
| 1286 FXDIB_Format dest_format = pBitmap->GetFormat(); | 1286 FXDIB_Format dest_format = pBitmap->GetFormat(); |
| 1287 FXDIB_Format src_format = pSrcBitmap->GetFormat(); | 1287 FXDIB_Format src_format = pSrcBitmap->GetFormat(); |
| 1288 int pitch = pBitmap->GetPitch(); | 1288 int pitch = pBitmap->GetPitch(); |
| 1289 FX_BYTE* buffer = pBitmap->GetBuffer(); | 1289 uint8_t* buffer = pBitmap->GetBuffer(); |
| 1290 if (dest_format == src_format) { | 1290 if (dest_format == src_format) { |
| 1291 for (int row = 0; row < height; row ++) { | 1291 for (int row = 0; row < height; row ++) { |
| 1292 FX_LPBYTE dest_scan = buffer + (dest_top + row) * pitch + dest_left
* Bpp; | 1292 FX_LPBYTE dest_scan = buffer + (dest_top + row) * pitch + dest_left
* Bpp; |
| 1293 FX_LPBYTE src_scan = (FX_LPBYTE)pSrcBitmap->GetScanline(src_top + ro
w) + src_left * Bpp; | 1293 FX_LPBYTE src_scan = (FX_LPBYTE)pSrcBitmap->GetScanline(src_top + ro
w) + src_left * Bpp; |
| 1294 if (Bpp == 4) { | 1294 if (Bpp == 4) { |
| 1295 for (int col = 0; col < width; col ++) { | 1295 for (int col = 0; col < width; col ++) { |
| 1296 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_scan[3], src_scan[0
], src_scan[1], src_scan[2])); | 1296 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_scan[3], src_scan[0
], src_scan[1], src_scan[2])); |
| 1297 dest_scan += 4; | 1297 dest_scan += 4; |
| 1298 src_scan += 4; | 1298 src_scan += 4; |
| 1299 } | 1299 } |
| 1300 } else { | 1300 } else { |
| 1301 for (int col = 0; col < width; col ++) { | 1301 for (int col = 0; col < width; col ++) { |
| 1302 *dest_scan++ = src_scan[2]; | 1302 *dest_scan++ = src_scan[2]; |
| 1303 *dest_scan++ = src_scan[1]; | 1303 *dest_scan++ = src_scan[1]; |
| 1304 *dest_scan++ = src_scan[0]; | 1304 *dest_scan++ = src_scan[0]; |
| 1305 src_scan += 3; | 1305 src_scan += 3; |
| 1306 } | 1306 } |
| 1307 } | 1307 } |
| 1308 } | 1308 } |
| 1309 return; | 1309 return; |
| 1310 } | 1310 } |
| 1311 FX_LPBYTE dest_buf = buffer + dest_top * pitch + dest_left * Bpp; | 1311 FX_LPBYTE dest_buf = buffer + dest_top * pitch + dest_left * Bpp; |
| 1312 if (dest_format == FXDIB_Rgb) { | 1312 if (dest_format == FXDIB_Rgb) { |
| 1313 if (src_format == FXDIB_Rgb32) { | 1313 if (src_format == FXDIB_Rgb32) { |
| 1314 for (int row = 0; row < height; row ++) { | 1314 for (int row = 0; row < height; row ++) { |
| 1315 FX_LPBYTE dest_scan = dest_buf + row * pitch; | 1315 FX_LPBYTE dest_scan = dest_buf + row * pitch; |
| 1316 FX_LPBYTE src_scan = (FX_BYTE*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 4; | 1316 FX_LPBYTE src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 4; |
| 1317 for (int col = 0; col < width; col ++) { | 1317 for (int col = 0; col < width; col ++) { |
| 1318 *dest_scan++ = src_scan[2]; | 1318 *dest_scan++ = src_scan[2]; |
| 1319 *dest_scan++ = src_scan[1]; | 1319 *dest_scan++ = src_scan[1]; |
| 1320 *dest_scan++ = src_scan[0]; | 1320 *dest_scan++ = src_scan[0]; |
| 1321 src_scan += 4; | 1321 src_scan += 4; |
| 1322 } | 1322 } |
| 1323 } | 1323 } |
| 1324 } else { | 1324 } else { |
| 1325 ASSERT(FALSE); | 1325 ASSERT(FALSE); |
| 1326 } | 1326 } |
| 1327 } else if (dest_format == FXDIB_Argb || dest_format == FXDIB_Rgb32) { | 1327 } else if (dest_format == FXDIB_Argb || dest_format == FXDIB_Rgb32) { |
| 1328 if (src_format == FXDIB_Rgb) { | 1328 if (src_format == FXDIB_Rgb) { |
| 1329 for (int row = 0; row < height; row ++) { | 1329 for (int row = 0; row < height; row ++) { |
| 1330 FX_BYTE* dest_scan = (FX_BYTE*)(dest_buf + row * pitch); | 1330 uint8_t* dest_scan = (uint8_t*)(dest_buf + row * pitch); |
| 1331 FX_LPBYTE src_scan = (FX_BYTE*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 3; | 1331 FX_LPBYTE src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top +
row) + src_left * 3; |
| 1332 if (src_format == FXDIB_Argb) { | 1332 if (src_format == FXDIB_Argb) { |
| 1333 for (int col = 0; col < width; col ++) { | 1333 for (int col = 0; col < width; col ++) { |
| 1334 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, FX_GAMMA(src_
scan[0]), FX_GAMMA(src_scan[1]), FX_GAMMA(src_scan[2]))); | 1334 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, FX_GAMMA(src_
scan[0]), FX_GAMMA(src_scan[1]), FX_GAMMA(src_scan[2]))); |
| 1335 dest_scan += 4; | 1335 dest_scan += 4; |
| 1336 src_scan += 3; | 1336 src_scan += 3; |
| 1337 } | 1337 } |
| 1338 } else { | 1338 } else { |
| 1339 for (int col = 0; col < width; col ++) { | 1339 for (int col = 0; col < width; col ++) { |
| 1340 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0],
src_scan[1], src_scan[2])); | 1340 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0],
src_scan[1], src_scan[2])); |
| 1341 dest_scan += 4; | 1341 dest_scan += 4; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1352 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_
scan[1], src_scan[2])); | 1352 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_
scan[1], src_scan[2])); |
| 1353 src_scan += 4; | 1353 src_scan += 4; |
| 1354 dest_scan += 4; | 1354 dest_scan += 4; |
| 1355 } | 1355 } |
| 1356 } | 1356 } |
| 1357 } | 1357 } |
| 1358 } else { | 1358 } else { |
| 1359 ASSERT(FALSE); | 1359 ASSERT(FALSE); |
| 1360 } | 1360 } |
| 1361 } | 1361 } |
| 1362 FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, FX_BYTE alpha) | 1362 FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, uint8_t alpha) |
| 1363 { | 1363 { |
| 1364 FX_BYTE r, g, b; | 1364 uint8_t r, g, b; |
| 1365 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYV
alue(cmyk), FXSYS_GetKValue(cmyk), | 1365 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYV
alue(cmyk), FXSYS_GetKValue(cmyk), |
| 1366 r, g, b); | 1366 r, g, b); |
| 1367 return ArgbEncode(alpha, r, g, b); | 1367 return ArgbEncode(alpha, r, g, b); |
| 1368 } | 1368 } |
| 1369 FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice, int x, int y, FX_DWORD color, int al
pha_flag, void* pIccTransform) | 1369 FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice, int x, int y, FX_DWORD color, int al
pha_flag, void* pIccTransform) |
| 1370 { | 1370 { |
| 1371 FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag); | 1371 FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag); |
| 1372 int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color); | 1372 int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color); |
| 1373 if (pIccTransform) { | 1373 if (pIccTransform) { |
| 1374 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->Ge
tIccModule(); | 1374 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->Ge
tIccModule(); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1601 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(pBitmap, dither_bi
ts, FALSE, pOriDevice, FALSE); | 1601 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(pBitmap, dither_bi
ts, FALSE, pOriDevice, FALSE); |
| 1602 SetDeviceDriver(pDriver); | 1602 SetDeviceDriver(pDriver); |
| 1603 return TRUE; | 1603 return TRUE; |
| 1604 } | 1604 } |
| 1605 CFX_FxgeDevice::~CFX_FxgeDevice() | 1605 CFX_FxgeDevice::~CFX_FxgeDevice() |
| 1606 { | 1606 { |
| 1607 if (m_bOwnedBitmap && GetBitmap()) { | 1607 if (m_bOwnedBitmap && GetBitmap()) { |
| 1608 delete GetBitmap(); | 1608 delete GetBitmap(); |
| 1609 } | 1609 } |
| 1610 } | 1610 } |
| OLD | NEW |