动画制作CImage以淡入创作

时间:2013-06-12 19:46:53

标签: c++ image winapi mfc

我目前有一个CView,它由一个集中的CImage组成,会立即加载我的应用程序。

我想通过在启动时使CImage淡入而不是简单地显示(我已经有一个启动画面,因此我没有要求如何设置动画{{1}来美化它}})。

为了显示我的图像,我已经覆盖了CWnd方法,如下所示:

CView::OnDraw

现在我不完全确定如何在创作中淡出它。我目前的行动计划是根据void CWelcomeView::OnDraw( _In_ CDC* pDC ) { CView::OnDraw( pDC ); static CImage backgroundImage; static bool bImageLoaded = false; if( !bImageLoaded ) { backgroundImage.LoadFromResource( AfxGetInstanceHandle(), IDB_WELCOMESCREEN ); bImageLoaded = true; } CRect clientRect; GetClientRect( &clientRect ); // The detination rectangle should be the same size as the image: POINT pointTopLeft = {(clientRect.Width()-backgroundImage.GetWidth())/2, (clientRect.Height()-backgroundImage.GetHeight())/2}; CRect destRect( pointTopLeft, CSize( backgroundImage.GetWidth(), backgroundImage.GetHeight() ) ); // Draw the image in the right space: backgroundImage.Draw( pDC->GetSafeHdc(), destRect ); } 创建一个计时器,并根据当前时间点和时钟开始时间之间的差异更改std::chrono::steady_clock的alpha值(我将保持为成员变量)。

但是,我不确定如何更改整个图像的alpha值?

提前致谢!

1 个答案:

答案 0 :(得分:0)

不使用backgroundImage.Draw(),而是使用AlphaBlend

backgroundImage.AlphaBlend(pDC->GetSafeHdc(), destRect
    , CRect(0, 0, backgroundImage.GetWidth(), backgroundImage.GetHeight())
    , bySrcAlpha);

在255处启动bySrcAlpha的值,并在计时器功能中将其减去适当的值。