GDI+渐变画刷怎么实现两种以上颜色渐变? GDI+渐变画刷怎么实现两种以上颜色渐变?两种颜色的渐变很好做两种颜色以上的呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是3个颜色,好像有一个办法,不过仅仅算法上的将这3个颜色,放在全色平面上,这个全色平面好像我在什么地方看到过可以用RGB来表示的,是一个近似三角形的,经常用于和CMYK颜色体系什么的比较然后就是计算过3个点的圆弧,极端情况是一条线段,然后用圆弧或者线段上的颜色去描不过实际使用上似乎很麻烦 GDI+竟然连三色渐变都这么麻烦吗 HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, szFileName, IMAGE_BITMAP, bmih.biWidth, bmih.biHeight, LR_LOADFROMFILE | LR_CREATEDIBSECTION ); m_iWidth = bmih.biWidth; m_iHeight = bmih.biHeight; HWND hWnd = pDevice->GetWnd(); HDC hdcWindow = ::GetDC( hWnd ); m_hBitmap = ::CreateCompatibleBitmap( hdcWindow, m_iWidth, m_iHeight ); m_hMaskBitmap = ::CreateBitmap( m_iWidth, m_iHeight, 1, 1, NULL ); HDC hTempDC = ::CreateCompatibleDC( hdcWindow ); m_hDC = ::CreateCompatibleDC( hdcWindow ); m_hMaskDC = ::CreateCompatibleDC( hdcWindow ); HBITMAP hOldBitmap = (HBITMAP)::SelectObject( hTempDC, hBmp ); m_hOldBitmap = (HBITMAP)::SelectObject( m_hDC, m_hBitmap ); m_hOldMaskBitmap = (HBITMAP)::SelectObject( m_hMaskDC, m_hMaskBitmap ); ::BitBlt( m_hDC, 0, 0, m_iWidth, m_iHeight, hTempDC, 0, 0, SRCCOPY ); ::SetBkColor( m_hDC, RGB(0,0,255) ); ::BitBlt( m_hMaskDC, 0, 0, m_iWidth, m_iHeight, m_hDC, 0, 0, SRCCOPY ); ::SetBkColor( m_hDC, RGB(0,0,0) ); ::SetTextColor( m_hDC, RGB(255,255,255) ); ::BitBlt( m_hDC, 0, 0, m_iWidth, m_iHeight, m_hMaskDC, 0, 0, SRCAND ); ::SelectObject( hTempDC, hOldBitmap ); DeleteDC( hTempDC ); DeleteObject( hBmp ); ::ReleaseDC( hWnd, hdcWindow ); Graphics g(lpDrawItemStruct->hDC); //从hDC创建Graphics对象Rect gRect(rc.left ,rc.top ,rc.Width (),rc.Height ()); //从CRect创建Rect对象Color colors[]={Color::Red ,Color::Yellow ,Color::Blue }; //定义3种颜色REAL positions[] = {0.0f,0.3f,1.0f}; //定义3种颜色距离起点位置//创建渐变画刷,初始的颜色值其实无效LinearGradientBrush lbrush (gRect,Color::Green ,Color::Brown ,LinearGradientModeVertical);lbrush.SetInterpolationColors (colors,positions,3); //定义多色渐变g.FillRectangle (&lbrush,gRect); //绘制矩形区域 有没有人有<Visual C++ 2008入门经典>中文版? 求助:获取当前文档指针 Unhandled exception in **.exe(MFC042D.dll):0xC0000005:Access violation 关于pic控件的简单问题!高手进啊 如何删除按钮? 常见问题总结 打开表出错了 如何让我的对话框截获WM_KILLFOCUS消息?我尽了全力还是不行!!!求救 OPENCV捕捉到的视频怎么转换成BMP格式的图片,并在picture控件中显示 list滚动条问题 急啊,关于树型控件的一个问题 问一个combo box下拉菜单的问题
将这3个颜色,放在全色平面上,这个全色平面好像我在什么地方看到过可以用RGB来表示的,是一个近似三角形的,经常用于和CMYK颜色体系什么的比较然后就是计算过3个点的圆弧,极端情况是一条线段,
然后用圆弧或者线段上的颜色去描不过实际使用上似乎很麻烦
m_iHeight = bmih.biHeight; HWND hWnd = pDevice->GetWnd();
HDC hdcWindow = ::GetDC( hWnd ); m_hBitmap = ::CreateCompatibleBitmap( hdcWindow, m_iWidth, m_iHeight );
m_hMaskBitmap = ::CreateBitmap( m_iWidth, m_iHeight, 1, 1, NULL ); HDC hTempDC = ::CreateCompatibleDC( hdcWindow );
m_hDC = ::CreateCompatibleDC( hdcWindow );
m_hMaskDC = ::CreateCompatibleDC( hdcWindow ); HBITMAP hOldBitmap = (HBITMAP)::SelectObject( hTempDC, hBmp );
m_hOldBitmap = (HBITMAP)::SelectObject( m_hDC, m_hBitmap );
m_hOldMaskBitmap = (HBITMAP)::SelectObject( m_hMaskDC, m_hMaskBitmap ); ::BitBlt( m_hDC, 0, 0, m_iWidth, m_iHeight, hTempDC, 0, 0, SRCCOPY ); ::SetBkColor( m_hDC, RGB(0,0,255) );
::BitBlt( m_hMaskDC, 0, 0, m_iWidth, m_iHeight, m_hDC, 0, 0, SRCCOPY ); ::SetBkColor( m_hDC, RGB(0,0,0) );
::SetTextColor( m_hDC, RGB(255,255,255) );
::BitBlt( m_hDC, 0, 0, m_iWidth, m_iHeight, m_hMaskDC, 0, 0, SRCAND ); ::SelectObject( hTempDC, hOldBitmap );
DeleteDC( hTempDC );
DeleteObject( hBmp ); ::ReleaseDC( hWnd, hdcWindow );
Rect gRect(rc.left ,rc.top ,rc.Width (),rc.Height ()); //从CRect创建Rect对象
Color colors[]={Color::Red ,Color::Yellow ,Color::Blue }; //定义3种颜色
REAL positions[] = {0.0f,0.3f,1.0f}; //定义3种颜色距离起点位置//创建渐变画刷,初始的颜色值其实无效
LinearGradientBrush lbrush (gRect,Color::Green ,Color::Brown ,LinearGradientModeVertical);
lbrush.SetInterpolationColors (colors,positions,3); //定义多色渐变
g.FillRectangle (&lbrush,gRect); //绘制矩形区域