100求救:怎样按照一定角度来画3种颜色的渐变颜色?

StarLee 2005-08-22 09:26:49
矩形区域不一定是正方形。
倾斜的角度是可变的,由用户输入。
0度的话就是水平的3种颜色渐变。
90度的话就是垂直的3种颜色渐变。
效果如下,不同字符代表不同的颜色。

1111111111111#############
111111111111#############$
11111111111#############$$
1111111111#############$$$
111111111#############$$$$
11111111#############$$$$$
1111111#############$$$$$$
111111#############$$$$$$$
11111#############$$$$$$$$
1111#############$$$$$$$$$
111#############$$$$$$$$$$
11#############$$$$$$$$$$$
1#############$$$$$$$$$$$$
#############$$$$$$$$$$$$$

请高手们多多帮忙!
谢谢了,先!

另外50分在:
http://community.csdn.net/Expert/topic/4211/4211792.xml?temp=.1048395
只要问题解决,100分送上!
...全文
240 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2005-08-31
  • 打赏
  • 举报
回复
给我你的email地址
StarLee 2005-08-31
  • 打赏
  • 举报
回复
楼上的,我从来没有搞过这方面的开发,所以请赎小弟愚昧,我还是不太明白你的方法。
能不能给我写段例子?
谢谢了,先!
寻开心 2005-08-30
  • 打赏
  • 举报
回复
建立一个内存dc和一个内存bitmap,bitmap大小和对话框背景一样大

根据用户指定的角度,在memdc里面建立一个倾斜的包围矩形

. *
. / \
. / \
. /----------------- \
. / | | \
.* | | *
. \| | /
. \----------------+ /
. \ /
. \ / V
. H *
.
.
H方向就是用户指定的方向
V方向是就是垂直用户指定的方向
这个包围的矩形显然是对话框背景在这两个方向上的投影范围
在H方向上,颜色上渐变的
在V方向上,颜色是相同的

方法一:
可以根据实际的H方向的大小,把H方向分割成为一系列点,在这些点上做平行V的线
显然把整个包围矩形分割成为了一系列的小矩形,对每个小矩形使用单色填充就可以了

方法二:
构造一个一个函数,计算出在矩形空间上的每个点,相对于包围矩形上的点的坐标,根据这个相对坐标来获取颜色,使用类似种子填充的方法来逐点设置中间矩形的颜色(不用SetPixel这样的函数,效率低),使用颜色直接填充Bitmap的数据最快

把填充后的memdc再bitblt到对话框背景上就可以了
StarLee 2005-08-30
  • 打赏
  • 举报
回复
楼上的,能不能说的详细一点儿呀?
我没有搞过这方面的开发!
谢谢了,先!
StarLee 2005-08-29
  • 打赏
  • 举报
回复
自己顶!
寻开心 2005-08-29
  • 打赏
  • 举报
回复
两步走:
第一步解决:一个水平方向的三色变换,这个很简单
构造一个函数,给定此时情况下的空间位置和颜色之间的关系: GetColorByPos(x,y)
第二步,对于非水平的,旋转一下就是了
构造一个旋转变换公式FunRotate(x,y,Angle)
对于任何一个点,找到旋转前对应的水平时候的空间位置,然后使用第一步的解决方案
如果垂直于渐变方向上的颜色是相同的,那么只要计算渐变方向上的各个点的颜色就可以了
其他的点用画线的方式实现,或者是画填充平行四边形的方式来实现
StarLee 2005-08-24
  • 打赏
  • 举报
回复
高手们多多帮忙呀!
我没有搞过这方面的开发!
谢谢了,先!
Zhymax 2005-08-22
  • 打赏
  • 举报
回复
可以分为多个三角形渐变,可以参考一下方法
TRIVERTEX vert [4] ;
GRADIENT_TRIANGLE gTri[2];
vert [0] .x = 0;
vert [0] .y = 0;
vert [0] .Red = 0x0000;
vert [0] .Green = 0x0000;
vert [0] .Blue = 0x0000;
vert [0] .Alpha = 0x0000;

vert [1] .x = 100;
vert [1] .y = 0;
vert [1] .Red = 0x0000;
vert [1] .Green = 0x0000;
vert [1] .Blue = 0xff00;
vert [1] .Alpha = 0x0000;

vert [2] .x = 100;
vert [2] .y = 32;
vert [2] .Red = 0x0000;
vert [2] .Green = 0x0000;
vert [2] .Blue = 0xff00;
vert [2] .Alpha = 0x0000;

vert [3] .x = 0;
vert [3] .y = 32;
vert [3] .Red = 0xff00;
vert [3] .Green = 0xff00;
vert [3] .Blue = 0xff00;
vert [3] .Alpha = 0x0000;

gTri[0].Vertex1 = 0;
gTri[0].Vertex2 = 1;
gTri[0].Vertex3 = 2;

gTri[1].Vertex1 = 0;
gTri[1].Vertex2 = 2;
gTri[1].Vertex3 = 3;
GradientFill(ps.hdc, vert, 4, >ri, 2, GRADIENT_FILL_TRIANGLE);
thisisll 2005-08-22
  • 打赏
  • 举报
回复
一个一个象素判断
符合哪种颜色就画哪种颜色

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧