如何画两种颜色之间的渐变色?我用画笔画的,是否太麻烦?请看代码! 我是说是不是CPU占用太大?有没有简单方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用GDI当然慢了,用WannaPlayDIB图形库吧,直接操作内存,绝对比你现在的算法速度高一个数量级以上(我有信心高两个数量级:),当然算法也要做一些优化,最好不要用浮点数。DIB库现在还没提供画线函数,但你画的都是标准垂直线,用WannaPlayDIB的DIB_Filter足够了。http://wannaplay.51.net/interfac.html[email protected] 我记得在《VC++技术内幕》中讲了怎么用DIB的 大家能否简单解释一下DIB如何使用?我就是想在一个 RECT 上用给定的两种颜色画出渐变色,就跟WIN98/2000/ME等的窗口标题栏一模一样。 用位图,在内存中生成一个256色的位图,位图像素的值从0到255,0号颜色就是color1,255号颜色就是color2,生成中间各颜色的RGB值赋给调色板里的相应的序号颜色,再StretchDIBits就OK了。void CreatePalette(COLORREF c1, COLORREF c2){ int r1, g1, b1, r2, g2, b2; RGBQUAD *p = lpbi->bmiColors; r1 = GetRValue(c1); g1 = GetGValue(c1); b1 = GetBValue(c1); r2 = GetRValue(c2); g2 = GetGValue(c2); b2 = GetBValue(c2); float r, g, b; r = (r2-r1)/256.0f; g = (g2-g1)/256.0f; b = (b2-b1)/256.0f; for(int i = 0; i < 256; i++) { p[i].rgbRed = (int)(r1+r*i); p[i].rgbGreen = (int)(g1+g*i); p[i].rgbBlue = (int)(b1+b*i); }} 1.老兄我也曾遇到过与你类似的问题:我当时的解决方案如下:a。 首先在内存中画好,然后再拷贝到视图上。方法上面各位有所介绍。b。 有一个API函数。指定三点的颜色,可以实现此区域内的颜色渐变。若是两点 也可。具体函数名我记不太清。等我查到以后再通知你。(函数名中含有“Fill”) 老是出错:MyView.obj : error LNK2001: unresolved external symbol __imp__GradientFill@24Release/aaa.exe : fatal error LNK1120: 1 unresolved externals何故? 头文件我已经包含。。 用GradientFill() 老是出错:MyView.obj : error LNK2001: unresolved external symbol __imp__GradientFill@24Release/aaa.exe : fatal error LNK1120: 1 unresolved externals何故? 头文件我已经包含。。 在程序中加入#pragma comment(lib, MSIMG32.LIB)或者加入在Project Set里,但是这个函数只能用在2000和98。如果考虑兼容性还是自己画,gamedragon的方法似乎不错,或者考虑jdzcy的方法,创建内存DC,SetDIBits。如果你只是想自己画Caption,则可以参看DrawFrameControl 更正#pragma comment(lib, "MSIMG32.LIB") 另一个问题:如何把 COLORREF 的R、G、B 转换成 COLOR16,也就是USHORT?GetRValue()得到的是 BYTE! 如何用MFC写向EXCEL写入如何excel内容 大虾们来看看,怎么解决WaitForSingleObject的问题? 请教 多线程中 CWebBrowser2 的问题 vc这个变态! 大家用什么软件来打包程序?? 如何实现从任意文件中读取二进制流到文本文件,然后从文本中读进数据, 再生成源文件? 为什么我在atl中用OLE2CT把BSTR转换成char数组时出错啊。 在vc中使用new分配内存,如果没有在程序中使用这些内存,编译器就不会真正的分配他们? 大侠看过来 有谁知道如何获到CPU温度 YANGZI你知道这个问题不? Ceditview 如何使用CDC来显示文本内容的问题
DIB库现在还没提供画线函数,但你画的都是标准垂直线,用WannaPlayDIB的DIB_Filter足够了。
http://wannaplay.51.net/interfac.html
[email protected]
void CreatePalette(COLORREF c1, COLORREF c2)
{
int r1, g1, b1, r2, g2, b2;
RGBQUAD *p = lpbi->bmiColors;
r1 = GetRValue(c1);
g1 = GetGValue(c1);
b1 = GetBValue(c1);
r2 = GetRValue(c2);
g2 = GetGValue(c2);
b2 = GetBValue(c2);
float r, g, b;
r = (r2-r1)/256.0f;
g = (g2-g1)/256.0f;
b = (b2-b1)/256.0f;
for(int i = 0; i < 256; i++)
{
p[i].rgbRed = (int)(r1+r*i);
p[i].rgbGreen = (int)(g1+g*i);
p[i].rgbBlue = (int)(b1+b*i);
}
}
a。 首先在内存中画好,然后再拷贝到视图上。方法上面各位有所介绍。
b。 有一个API函数。指定三点的颜色,可以实现此区域内的颜色渐变。若是两点
也可。具体函数名我记不太清。等我查到以后再通知你。(函数名中含有“Fill”)
Release/aaa.exe : fatal error LNK1120: 1 unresolved externals何故? 头文件我已经包含。。
Release/aaa.exe : fatal error LNK1120: 1 unresolved externals何故? 头文件我已经包含。。
如果你只是想自己画Caption,则可以参看DrawFrameControl