Как сохранить вертикальный градиент в виде растрового изображения
Я хочу сохранить объект градиента как 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); }