Shahzad Naseer Ответов: 1

Как сохранить вертикальный градиент в виде растрового изображения


Я хочу сохранить объект градиента как Cbitmap. функция MakeDiagnolGradientBitmap() сохраняет градиент Diagnol. Я просто хочу сэкономить Вертикальный Градиент.

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);

}


Что я уже пробовал:

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);

}

1 Ответов

Рейтинг:
1