Nana开发:图像混合

混合图像是用于创建强大且迷人的用户界面的重要方法之一。这是一篇向导,用于展示如何使用Nana库来混合图像并显示混合的结果。


在开始这个向导之前,我们需要准备两张用于混合的图片。

image01

image01

image02

image02


这两张图片是PNG格式的,在使用之前,我们需要开启Nana库对PNG的支持

现在,我们来编码:

#include <nana/gui/wvl.hpp>
#include <nana/gui/drawing.hpp>
#include <nana/gui/timer.hpp>

class tsform: public nana::gui::form
{
public:
	//因为我们准备的图片大小是 450*300,
	//这个窗口创建的大小与图片保持一致.
	tsform()
		:nana::gui::form(nana::gui::API::make_center(450, 300)), fade_rate_(0.1), delta_(0.1)
	{
		//打开图像文件.
		image1_.open(STR(“image01.png”));
		image2_.open(STR(“image02.png”));
		timer_.make_tick(nana::make_fun(*this, &tsform::_m_blend));
		timer_.interval(10);
	}
private:
	void _m_blend()
	{
		fade_rate_ += delta_;
		if(fade_rate_ > 1)
		{
			fade_rate_ = 1;
			delta_ = -0.01;
		}
		else if(fade_rate_ < 0)
		{
			fade_rate_ = 0;
			delta_ = 0.01;
		}
            
		//在混合之前,需要将图像拷贝到graphics对象中
		nana::paint::graphics graph1(450, 300);
		image1_.paste(graph1, 0, 0);

		nana::paint::graphics graph2(450, 300);
		image2_.paste(graph2, 0, 0);

		//执行混合,结果保存在graph2对象中.
		graph1.blend(graph2, 0, 0, fade_rate_);

		//显示结果,将graph2中的内容绘制到窗口上.
		nana::gui::drawing drawing(*this);
		drawing.clear();
		drawing.bitblt(0, 0, 450, 300, graph2, 0, 0);
		drawing.update();
	}
private:
	double    fade_rate_;
	double    delta_;
	nana::gui::timer    timer_;
	nana::paint::image image1_, image2_;
};

int main()
{
	tsform fm;
	fm.show();
	nana::gui::exec();
}

运行程序,看它的实际运行效果。

初始图像


混合的图像



最终的图像



程序重复地执行图像混合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值