| 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 "../../../include/fxcodec/fx_codec.h" | 8 #include "../../../include/fxcodec/fx_codec.h" |
| 9 #include "dib_int.h" | 9 #include "dib_int.h" |
| 10 const FX_BYTE g_GammaRamp[256] = { | 10 const FX_BYTE g_GammaRamp[256] = { |
| (...skipping 3583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3594 { | 3594 { |
| 3595 ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module; | 3595 ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module; |
| 3596 FX_BOOL isSrcCmyk = src_format & 0x0400 ? TRUE : FALSE; | 3596 FX_BOOL isSrcCmyk = src_format & 0x0400 ? TRUE : FALSE; |
| 3597 FX_BOOL isDstCmyk = dest_format & 0x0400 ? TRUE : FALSE; | 3597 FX_BOOL isDstCmyk = dest_format & 0x0400 ? TRUE : FALSE; |
| 3598 pDestPalette = NULL; | 3598 pDestPalette = NULL; |
| 3599 if (pIccTransform) { | 3599 if (pIccTransform) { |
| 3600 if (pSrcPalette) { | 3600 if (pSrcPalette) { |
| 3601 if ((dest_format & 0xff) == 8) { | 3601 if ((dest_format & 0xff) == 8) { |
| 3602 int pal_count = 1 << (src_format & 0xff); | 3602 int pal_count = 1 << (src_format & 0xff); |
| 3603 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3603 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); |
| 3604 if (!gray_pal) { | |
| 3605 return; | |
| 3606 } | |
| 3607 pDestPalette = (FX_DWORD*)gray_pal; | 3604 pDestPalette = (FX_DWORD*)gray_pal; |
| 3608 for (int i = 0; i < pal_count; i ++) { | 3605 for (int i = 0; i < pal_count; i ++) { |
| 3609 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); | 3606 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); |
| 3610 pIccModule->TranslateScanline(pIccTransform, gray_pal, (FX_L
PCBYTE)&color, 1); | 3607 pIccModule->TranslateScanline(pIccTransform, gray_pal, (FX_L
PCBYTE)&color, 1); |
| 3611 gray_pal ++; | 3608 gray_pal ++; |
| 3612 } | 3609 } |
| 3613 } else { | 3610 } else { |
| 3614 int palsize = 1 << (src_format & 0xff); | 3611 int palsize = 1 << (src_format & 0xff); |
| 3615 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 3612 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 3616 if (!pDestPalette) { | |
| 3617 return; | |
| 3618 } | |
| 3619 for (int i = 0; i < palsize; i ++) { | 3613 for (int i = 0; i < palsize; i ++) { |
| 3620 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); | 3614 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); |
| 3621 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&col
or, (FX_LPCBYTE)&color, 1); | 3615 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&col
or, (FX_LPCBYTE)&color, 1); |
| 3622 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(color) : FXARGB_T
ODIB(color); | 3616 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(color) : FXARGB_T
ODIB(color); |
| 3623 } | 3617 } |
| 3624 } | 3618 } |
| 3625 } else { | 3619 } else { |
| 3626 int pal_count = 1 << (src_format & 0xff); | 3620 int pal_count = 1 << (src_format & 0xff); |
| 3627 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3621 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); |
| 3628 if (!gray_pal) { | |
| 3629 return; | |
| 3630 } | |
| 3631 if (pal_count == 2) { | 3622 if (pal_count == 2) { |
| 3632 gray_pal[0] = 0; | 3623 gray_pal[0] = 0; |
| 3633 gray_pal[1] = 255; | 3624 gray_pal[1] = 255; |
| 3634 } else { | 3625 } else { |
| 3635 for (int i = 0; i < pal_count; i++) { | 3626 for (int i = 0; i < pal_count; i++) { |
| 3636 gray_pal[i] = i; | 3627 gray_pal[i] = i; |
| 3637 } | 3628 } |
| 3638 } | 3629 } |
| 3639 if ((dest_format & 0xff) == 8) { | 3630 if ((dest_format & 0xff) == 8) { |
| 3640 pIccModule->TranslateScanline(pIccTransform, gray_pal, gray_pal,
pal_count); | 3631 pIccModule->TranslateScanline(pIccTransform, gray_pal, gray_pal,
pal_count); |
| 3641 pDestPalette = (FX_DWORD*)gray_pal; | 3632 pDestPalette = (FX_DWORD*)gray_pal; |
| 3642 } else { | 3633 } else { |
| 3643 pDestPalette = FX_Alloc(FX_DWORD, pal_count); | 3634 pDestPalette = FX_Alloc(FX_DWORD, pal_count); |
| 3644 if (!pDestPalette) { | |
| 3645 FX_Free(gray_pal); | |
| 3646 return; | |
| 3647 } | |
| 3648 for (int i = 0; i < pal_count; i ++) { | 3635 for (int i = 0; i < pal_count; i ++) { |
| 3649 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&pDe
stPalette[i], &gray_pal[i], 1); | 3636 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&pDe
stPalette[i], &gray_pal[i], 1); |
| 3650 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(pDestPalette[i])
: FXARGB_TODIB(pDestPalette[i]); | 3637 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(pDestPalette[i])
: FXARGB_TODIB(pDestPalette[i]); |
| 3651 } | 3638 } |
| 3652 FX_Free(gray_pal); | 3639 FX_Free(gray_pal); |
| 3653 } | 3640 } |
| 3654 } | 3641 } |
| 3655 } else { | 3642 } else { |
| 3656 if (pSrcPalette) { | 3643 if (pSrcPalette) { |
| 3657 if ((dest_format & 0xff) == 8) { | 3644 if ((dest_format & 0xff) == 8) { |
| 3658 int pal_count = 1 << (src_format & 0xff); | 3645 int pal_count = 1 << (src_format & 0xff); |
| 3659 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3646 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); |
| 3660 if (!gray_pal) { | |
| 3661 return; | |
| 3662 } | |
| 3663 pDestPalette = (FX_DWORD*)gray_pal; | 3647 pDestPalette = (FX_DWORD*)gray_pal; |
| 3664 if (isSrcCmyk) { | 3648 if (isSrcCmyk) { |
| 3665 for (int i = 0; i < pal_count; i ++) { | 3649 for (int i = 0; i < pal_count; i ++) { |
| 3666 FX_CMYK cmyk = pSrcPalette[i]; | 3650 FX_CMYK cmyk = pSrcPalette[i]; |
| 3667 FX_BYTE r, g, b; | 3651 FX_BYTE r, g, b; |
| 3668 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), | 3652 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), |
| 3669 r, g, b); | 3653 r, g, b); |
| 3670 *gray_pal ++ = FXRGB2GRAY(r, g, b); | 3654 *gray_pal ++ = FXRGB2GRAY(r, g, b); |
| 3671 } | 3655 } |
| 3672 } else | 3656 } else |
| 3673 for (int i = 0; i < pal_count; i ++) { | 3657 for (int i = 0; i < pal_count; i ++) { |
| 3674 FX_ARGB argb = pSrcPalette[i]; | 3658 FX_ARGB argb = pSrcPalette[i]; |
| 3675 *gray_pal ++ = FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb)
, FXARGB_B(argb)); | 3659 *gray_pal ++ = FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb)
, FXARGB_B(argb)); |
| 3676 } | 3660 } |
| 3677 } else { | 3661 } else { |
| 3678 int palsize = 1 << (src_format & 0xff); | 3662 int palsize = 1 << (src_format & 0xff); |
| 3679 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 3663 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 3680 if (!pDestPalette) { | |
| 3681 return; | |
| 3682 } | |
| 3683 if (isDstCmyk == isSrcCmyk) { | 3664 if (isDstCmyk == isSrcCmyk) { |
| 3684 FXSYS_memcpy32(pDestPalette, pSrcPalette, palsize * sizeof(F
X_DWORD)); | 3665 FXSYS_memcpy32(pDestPalette, pSrcPalette, palsize * sizeof(F
X_DWORD)); |
| 3685 } else { | 3666 } else { |
| 3686 for (int i = 0; i < palsize; i ++) { | 3667 for (int i = 0; i < palsize; i ++) { |
| 3687 FX_CMYK cmyk = pSrcPalette[i]; | 3668 FX_CMYK cmyk = pSrcPalette[i]; |
| 3688 FX_BYTE r, g, b; | 3669 FX_BYTE r, g, b; |
| 3689 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), | 3670 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), |
| 3690 r, g, b); | 3671 r, g, b); |
| 3691 pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b); | 3672 pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b); |
| 3692 } | 3673 } |
| 3693 } | 3674 } |
| 3694 } | 3675 } |
| 3695 } else { | 3676 } else { |
| 3696 if ((dest_format & 0xff) == 8) { | 3677 if ((dest_format & 0xff) == 8) { |
| 3697 int pal_count = 1 << (src_format & 0xff); | 3678 int pal_count = 1 << (src_format & 0xff); |
| 3698 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3679 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); |
| 3699 if (!gray_pal) { | |
| 3700 return; | |
| 3701 } | |
| 3702 if (pal_count == 2) { | 3680 if (pal_count == 2) { |
| 3703 gray_pal[0] = 0; | 3681 gray_pal[0] = 0; |
| 3704 gray_pal[1] = 255; | 3682 gray_pal[1] = 255; |
| 3705 } else { | 3683 } else { |
| 3706 for (int i = 0; i < pal_count; i++) { | 3684 for (int i = 0; i < pal_count; i++) { |
| 3707 gray_pal[i] = i; | 3685 gray_pal[i] = i; |
| 3708 } | 3686 } |
| 3709 } | 3687 } |
| 3710 pDestPalette = (FX_DWORD*)gray_pal; | 3688 pDestPalette = (FX_DWORD*)gray_pal; |
| 3711 } else { | 3689 } else { |
| 3712 int palsize = 1 << (src_format & 0xff); | 3690 int palsize = 1 << (src_format & 0xff); |
| 3713 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 3691 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 3714 if (!pDestPalette) { | |
| 3715 return; | |
| 3716 } | |
| 3717 if (palsize == 2) { | 3692 if (palsize == 2) { |
| 3718 pDestPalette[0] = isSrcCmyk ? 255 : 0xff000000; | 3693 pDestPalette[0] = isSrcCmyk ? 255 : 0xff000000; |
| 3719 pDestPalette[1] = isSrcCmyk ? 0 : 0xffffffff; | 3694 pDestPalette[1] = isSrcCmyk ? 0 : 0xffffffff; |
| 3720 } else { | 3695 } else { |
| 3721 for (int i = 0; i < palsize; i++) { | 3696 for (int i = 0; i < palsize; i++) { |
| 3722 pDestPalette[i] = isSrcCmyk ? FX_CCOLOR(i) : (i * 0x1010
1); | 3697 pDestPalette[i] = isSrcCmyk ? FX_CCOLOR(i) : (i * 0x1010
1); |
| 3723 } | 3698 } |
| 3724 } | 3699 } |
| 3725 if (isSrcCmyk != isDstCmyk) { | 3700 if (isSrcCmyk != isDstCmyk) { |
| 3726 for (int i = 0; i < palsize; i ++) { | 3701 for (int i = 0; i < palsize; i ++) { |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4456 } | 4431 } |
| 4457 FX_BOOL CFX_BitmapComposer::SetInfo(int width, int height, FXDIB_Format src_form
at, FX_DWORD* pSrcPalette) | 4432 FX_BOOL CFX_BitmapComposer::SetInfo(int width, int height, FXDIB_Format src_form
at, FX_DWORD* pSrcPalette) |
| 4458 { | 4433 { |
| 4459 m_SrcFormat = src_format; | 4434 m_SrcFormat = src_format; |
| 4460 if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalett
e, m_MaskColor, FXDIB_BLEND_NORMAL, | 4435 if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalett
e, m_MaskColor, FXDIB_BLEND_NORMAL, |
| 4461 m_pClipMask != NULL || (m_BitmapAlpha < 255), m_bRgbB
yteOrder, m_AlphaFlag, m_pIccTransform)) { | 4436 m_pClipMask != NULL || (m_BitmapAlpha < 255), m_bRgbB
yteOrder, m_AlphaFlag, m_pIccTransform)) { |
| 4462 return FALSE; | 4437 return FALSE; |
| 4463 } | 4438 } |
| 4464 if (m_bVertical) { | 4439 if (m_bVertical) { |
| 4465 m_pScanlineV = FX_Alloc(FX_BYTE, m_pBitmap->GetBPP() / 8 * width + 4); | 4440 m_pScanlineV = FX_Alloc(FX_BYTE, m_pBitmap->GetBPP() / 8 * width + 4); |
| 4466 if (!m_pScanlineV) { | |
| 4467 return FALSE; | |
| 4468 } | |
| 4469 m_pClipScanV = FX_Alloc(FX_BYTE, m_pBitmap->GetHeight()); | 4441 m_pClipScanV = FX_Alloc(FX_BYTE, m_pBitmap->GetHeight()); |
| 4470 if (!m_pClipScanV) { | |
| 4471 return FALSE; | |
| 4472 } | |
| 4473 if (m_pBitmap->m_pAlphaMask) { | 4442 if (m_pBitmap->m_pAlphaMask) { |
| 4474 m_pScanlineAlphaV = FX_Alloc(FX_BYTE, width + 4); | 4443 m_pScanlineAlphaV = FX_Alloc(FX_BYTE, width + 4); |
| 4475 if (!m_pScanlineAlphaV) { | |
| 4476 return FALSE; | |
| 4477 } | |
| 4478 } | 4444 } |
| 4479 } | 4445 } |
| 4480 if (m_BitmapAlpha < 255) { | 4446 if (m_BitmapAlpha < 255) { |
| 4481 m_pAddClipScan = FX_Alloc(FX_BYTE, m_bVertical ? m_pBitmap->GetHeight()
: m_pBitmap->GetWidth()); | 4447 m_pAddClipScan = FX_Alloc(FX_BYTE, m_bVertical ? m_pBitmap->GetHeight()
: m_pBitmap->GetWidth()); |
| 4482 if (!m_pAddClipScan) { | |
| 4483 return FALSE; | |
| 4484 } | |
| 4485 } | 4448 } |
| 4486 return TRUE; | 4449 return TRUE; |
| 4487 } | 4450 } |
| 4488 void CFX_BitmapComposer::DoCompose(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int
dest_width, FX_LPCBYTE clip_scan, | 4451 void CFX_BitmapComposer::DoCompose(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int
dest_width, FX_LPCBYTE clip_scan, |
| 4489 FX_LPCBYTE src_extra_alpha, FX_LPBYTE dst_ext
ra_alpha) | 4452 FX_LPCBYTE src_extra_alpha, FX_LPBYTE dst_ext
ra_alpha) |
| 4490 { | 4453 { |
| 4491 if (m_BitmapAlpha < 255) { | 4454 if (m_BitmapAlpha < 255) { |
| 4492 if (clip_scan) { | 4455 if (clip_scan) { |
| 4493 for (int i = 0; i < dest_width; i ++) { | 4456 for (int i = 0; i < dest_width; i ++) { |
| 4494 m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255; | 4457 m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4584 } | 4547 } |
| 4585 src_alpha_scan = m_pScanlineAlphaV; | 4548 src_alpha_scan = m_pScanlineAlphaV; |
| 4586 dest_alpha_scan = dest_alpha_buf; | 4549 dest_alpha_scan = dest_alpha_buf; |
| 4587 if (dest_alpha_scan) { | 4550 if (dest_alpha_scan) { |
| 4588 for (i = 0; i < m_DestHeight; i ++) { | 4551 for (i = 0; i < m_DestHeight; i ++) { |
| 4589 *dest_alpha_scan = *src_alpha_scan++; | 4552 *dest_alpha_scan = *src_alpha_scan++; |
| 4590 dest_alpha_scan += y_alpha_step; | 4553 dest_alpha_scan += y_alpha_step; |
| 4591 } | 4554 } |
| 4592 } | 4555 } |
| 4593 } | 4556 } |
| OLD | NEW |