如何将垂直渐变保存为位图 [英] How do I save vertical gradient as bitmap
本文介绍了如何将垂直渐变保存为位图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将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屋!
查看全文