如何将垂直渐变保存为位图 [英] How do I save vertical gradient as bitmap

查看:81
本文介绍了如何将垂直渐变保存为位图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将Gradient对象保存为Cbitmap。函数 MakeDiagnolGradientBitmap()保存了Diagnol Gradient。我只想保存 Vertical Gradient。



I want to save Gradient object as Cbitmap. The Function MakeDiagnolGradientBitmap() saves Diagnol Gradient. I Simply want to save Vertical Gradient.

void CButtonST::MakeDiagnolGradientBitmap()
{
	CPaintDC dc(this);
	CRect rect;
	GetClientRect(&rect);

	int r1 = 245, g1 = 245, b1 = 245;
	int r2 = 230, g2 = 0, b2 = 0;

	int x1 = 0, y1 = 0;
	int x2 = 0, y2 = 0;

	CDC dc2;
	dc2.CreateCompatibleDC(&dc);

	if (m_bitmap.m_hObject)
		m_bitmap.DeleteObject();
	m_bitmap.CreateCompatibleBitmap(&dc, rect.Width(),
		rect.Height());

	CBitmap *oldbmap = dc2.SelectObject(&m_bitmap);
//-----------------------------------------------------------------------
	while (x1 < rect.Width() && y1 < rect.Height())
	{
		if (y1 < rect.Height() - 1)
			y1++;
		else
			x1++;

		if (x2 < rect.Width() - 1)
			x2++;
		else
			y2++;

		int r, g, b;
		int i = x1 + y1;
		r = r1 + (i * (r2 - r1) / (rect.Width() + rect.Height()));
		g = g1 + (i * (g2 - g1) / (rect.Width() + rect.Height()));
		b = b1 + (i * (b2 - b1) / (rect.Width() + rect.Height()));

		CPen p(PS_SOLID, 1, RGB(r, g, b));
		CPen *oldpen = dc2.SelectObject(&p);

		dc2.MoveTo(x1, y1);
		dc2.LineTo(x2, y2);

		dc2.SelectObject(oldpen);
	}
//------------------------------------------------------------------------
	dc2.SelectObject(oldbmap);

}





我的尝试:





What I have tried:

void CButtonST::MakeVerticalGradientBitmap()
{
	CPaintDC dc(this);
	CRect rect;
	GetClientRect(&rect);

	int r1 = 245, g1 = 245, b1 = 245;
	int r2 = 230, g2 = 0, b2 = 0;

	int x1 = 0, y1 = 0;
	int x2 = 0, y2 = 0;

	CDC dc2;
	dc2.CreateCompatibleDC(&dc);

	if (m_bitmap.m_hObject)
		m_bitmap.DeleteObject();
	m_bitmap.CreateCompatibleBitmap(&dc, rect.Width(),
		rect.Height());

	CBitmap *oldbmap = dc2.SelectObject(&m_bitmap);
//-----------------------------------------------------------------------
     for(int i=0;i<rect.Height();i++)
{ 
    int r,g,b;
    r = r1 + (i * (r2-r1) / rect.Height());
    g = g1 + (i * (g2-g1) / rect.Height());
    b = b1 + (i * (b2-b1) / rect.Height());
    //pDC->FillSolidRect(0,i,rect.Width(),1,RGB(r,g,b));


		dc2.SelectObject(oldpen);
	}
//------------------------------------------------------------------------
	dc2.SelectObject(oldbmap);

}

推荐答案

参见将CBitmap保存为MFC中的.bmp文件 [ ^ ]


这篇关于如何将垂直渐变保存为位图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆