diff --git a/DesktopEditor/graphics/Graphics.cpp b/DesktopEditor/graphics/Graphics.cpp index 9099303ae9..19ba697d17 100644 --- a/DesktopEditor/graphics/Graphics.cpp +++ b/DesktopEditor/graphics/Graphics.cpp @@ -1325,19 +1325,19 @@ namespace Aggplus m_frame_buffer.ren_buf().attach(pBuffer, m_frame_buffer.ren_buf().width(), m_frame_buffer.ren_buf().height(), m_frame_buffer.ren_buf().stride()); if (NULL == m_pAlphaMask) - pCurrentGraphicsLayer->BlendTo(m_frame_buffer.pixfmt()); + Aggplus::BlendTo(pCurrentGraphicsLayer, m_frame_buffer.pixfmt()); else { switch(m_pAlphaMask->GetDataType()) { case EMaskDataType::ImageBuffer: { - pCurrentGraphicsLayer->BlendTo>(m_frame_buffer.pixfmt(), m_pAlphaMask->GetBuffer(), m_pAlphaMask->GetStep()); + Aggplus::BlendTo>(pCurrentGraphicsLayer, m_frame_buffer.pixfmt(), m_pAlphaMask->GetBuffer(), m_pAlphaMask->GetStep()); break; } case EMaskDataType::AlphaBuffer: { - pCurrentGraphicsLayer->BlendTo(m_frame_buffer.pixfmt(), m_pAlphaMask->GetBuffer(), m_pAlphaMask->GetStep()); + Aggplus::BlendTo(pCurrentGraphicsLayer, m_frame_buffer.pixfmt(), m_pAlphaMask->GetBuffer(), m_pAlphaMask->GetStep()); break; } } diff --git a/DesktopEditor/graphics/Graphics.h b/DesktopEditor/graphics/Graphics.h index 15b9625aca..99516a2bd7 100644 --- a/DesktopEditor/graphics/Graphics.h +++ b/DesktopEditor/graphics/Graphics.h @@ -64,7 +64,7 @@ #include "Color.h" #include "Matrix.h" -#include "GraphicsLayer.h" +#include "GraphicsLayerBlend.h" #include "GraphicsPath.h" #include "AlphaMask.h" #include "Clip.h" diff --git a/DesktopEditor/graphics/GraphicsLayer.h b/DesktopEditor/graphics/GraphicsLayer.h index 19dffc9ae9..8b4914291e 100644 --- a/DesktopEditor/graphics/GraphicsLayer.h +++ b/DesktopEditor/graphics/GraphicsLayer.h @@ -32,93 +32,6 @@ namespace Aggplus void SetOpacity(double dOpacity); void SetOpacity(BYTE uchOpacity); - template - void BlendTo(SrcPixelFormatRenderer& oSrc) - { - if (NULL == m_pBuffer || 0 == oSrc.width() || 0 == oSrc.height()) - return; - - typedef typename SrcPixelFormatRenderer::order_type order_type; - typedef typename SrcPixelFormatRenderer::value_type value_type; - - int nStep = 4; - BYTE* pSrcBuffer = m_pBuffer; - value_type* pDstBuffer = NULL; - BYTE uchAlpha; - - unsigned int unSrcW = oSrc.width(); - unsigned int unSrcH = oSrc.height(); - - for (unsigned int unY = 0; unY < unSrcH; ++unY) - { - pDstBuffer = oSrc.row_ptr(unY); - for (unsigned int unX = 0; unX < unSrcW; ++unX) - { - uchAlpha = (SrcPixelFormatRenderer::base_mask + m_oSettings.m_uchOpacity * pSrcBuffer[order_type::A]) >> 8; - if (uchAlpha) - { - if(uchAlpha == SrcPixelFormatRenderer::base_mask) - { - pDstBuffer[order_type::R] = pSrcBuffer[order_type::R]; - pDstBuffer[order_type::G] = pSrcBuffer[order_type::G]; - pDstBuffer[order_type::B] = pSrcBuffer[order_type::B]; - pDstBuffer[order_type::A] = SrcPixelFormatRenderer::base_mask; - } - else - { - SrcPixelFormatRenderer::blender_type::blend_pix(pDstBuffer, pSrcBuffer[order_type::R], pSrcBuffer[order_type::G], pSrcBuffer[order_type::B], uchAlpha); - } - } - - pSrcBuffer += nStep; - pDstBuffer += nStep; - } - } - } - - template - void BlendTo(SrcPixelFormatRenderer& oSrc, BYTE* pAlphaMaskBuffer, UINT unAlphaMaskStep) - { - if (NULL == m_pBuffer || 0 == oSrc.width() || 0 == oSrc.height()) - return; - - typedef typename SrcPixelFormatRenderer::order_type order_type; - typedef typename SrcPixelFormatRenderer::value_type value_type; - - int nStep = 4; - BYTE* pSrcBuffer = m_pBuffer; - value_type* pDstBuffer = NULL; - BYTE* pSrcAlphaMaskBuffer = pAlphaMaskBuffer; - BYTE uchAlpha; - - unsigned int unSrcW = oSrc.width(); - unsigned int unSrcH = oSrc.height(); - - for (unsigned int unY = 0; unY < unSrcH; ++unY) - { - pDstBuffer = oSrc.row_ptr(unY); - for (unsigned int unX = 0; unX < unSrcW; ++unX) - { - uchAlpha = ((SrcPixelFormatRenderer::base_mask + m_oSettings.m_uchOpacity * pSrcBuffer[order_type::A] * AlphaMaskFunction::calculate(pSrcAlphaMaskBuffer)) >> 16); - - if(uchAlpha == SrcPixelFormatRenderer::base_mask) - { - pDstBuffer[order_type::R] = pSrcBuffer[order_type::R]; - pDstBuffer[order_type::G] = pSrcBuffer[order_type::G]; - pDstBuffer[order_type::B] = pSrcBuffer[order_type::B]; - pDstBuffer[order_type::A] = SrcPixelFormatRenderer::base_mask; - } - else - { - SrcPixelFormatRenderer::blender_type::blend_pix(pDstBuffer, pSrcBuffer[order_type::R], pSrcBuffer[order_type::G], pSrcBuffer[order_type::B], uchAlpha); - } - - pSrcBuffer += nStep; - pDstBuffer += nStep; - pSrcAlphaMaskBuffer += unAlphaMaskStep; - } - } - } private: BYTE* m_pBuffer; bool m_bExternalBuffer; diff --git a/DesktopEditor/graphics/pro/graphics.pro b/DesktopEditor/graphics/pro/graphics.pro index c917881b12..e8919e9eb9 100644 --- a/DesktopEditor/graphics/pro/graphics.pro +++ b/DesktopEditor/graphics/pro/graphics.pro @@ -63,7 +63,8 @@ SOURCES += \ # grapgics layer HEADERS += \ - ./../GraphicsLayer.h + ./../GraphicsLayer.h \ + ./../GraphicsLayerBlend.h SOURCES += \ ./../GraphicsLayer.cpp