颜色填充算法

afu00 2003-09-12 11:31:59
画一个圆,圆上只知道十六个点颜色,想通过这十六
个点颜色来平均填充此圆,请问有什么办法阿?
...全文
70 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
afu00 2003-09-14
  • 打赏
  • 举报
回复
up
chinalijun19790517 2003-09-12
  • 打赏
  • 举报
回复
太多 没法贴 研究研究吧

void PaintGradiantRect(CDC *pDC, const RECT &rect,
COLORREF clrFrom, COLORREF clrTo =RGB(255,255,255),
BOOL hori = true, BOOL ascend = true)
{
int cxCap = rect.right - rect.left;
int cyCap = rect.bottom - rect.top;

// Get the intensity values for the ending color
int r1 = GetRValue(clrTo); // red
int g1 = GetGValue(clrTo); // green
int b1 = GetBValue(clrTo); // blue

// Get the intensity values for the begining color
int r2 = GetRValue(clrFrom); // red
int g2 = GetGValue(clrFrom); // green
int b2 = GetBValue(clrFrom); // blue

int r, g, b;

if(hori) //paint horizontal rect;
{
int x = cxCap;
int w = x; // width of area to shade
int xDelta= max(w/NCOLORSHADES,1); // width of one shade band


while (x >= xDelta) {
x -= xDelta;
if (r1 > r2)
r = r1 - (r1-r2)*(w-x)/w;
else
r = r1 + (r2-r1)*(w-x)/w;

if (g1 > g2)
g = g1 - (g1-g2)*(w-x)/w;
else
g = g1 + (g2-g1)*(w-x)/w;

if (b1 > b2)
b = b1 - (b1-b2)*(w-x)/w;
else
b = b1 + (b2-b1)*(w-x)/w;

if(ascend) // Paint from left to right;
PaintRect(pDC, rect.left+x, rect.top, xDelta, cyCap, RGB(r, g, b));
else // Paint from right to left;
PaintRect(pDC, rect.right-x-xDelta, rect.top, xDelta, cyCap, RGB(r, g, b));
}
}
else //paint vertical rect;
{
int y = cyCap;
int w = y; // height of area to shade
int yDelta= max(w/NCOLORSHADES,1); // height of one shade band


while (y >= yDelta) {
y -= yDelta;
if (r1 > r2)
r = r1 - (r1-r2)*(w-y)/w;
else
r = r1 + (r2-r1)*(w-y)/w;

if (g1 > g2)
g = g1 - (g1-g2)*(w-y)/w;
else
g = g1 + (g2-g1)*(w-y)/w;

if (b1 > b2)
b = b1 - (b1-b2)*(w-y)/w;
else
b = b1 + (b2-b1)*(w-y)/w;

if(ascend) // Paint from top to bottom;
PaintRect(pDC, rect.left, rect.top+y, cxCap, yDelta, RGB(r, g, b));
else // Paint from bottom to top;
PaintRect(pDC, rect.left, rect.bottom-y-yDelta, cxCap, yDelta, RGB(r, g, b));
}
}

}
afu00 2003-09-12
  • 打赏
  • 举报
回复
就是原先画了一个圆,在圆面上只知道16个元素点的数值,
想通过这十六个点过度(就是用十六点作参考点)渐变填充
圆面积
afu00 2003-09-12
  • 打赏
  • 举报
回复
你理解错了阿,我现在是十六个RGB(。。。。。)阿,不是两个RGB中间的
渐变阿
面向工程应用:市面上的一些密码学课程和密码学的书籍,很多都是从考证出发,讲解算法原理并不面向工程应用,而我们现在缺少的是工程应用相关的知识,本课程从工程应用出发,每种技术都主要讲解其在工程中的使用,并演示工程应用的代码。 从零实现部分算法: 课程中实现了base16编解码 ,XOR对称加解密算法,PKCS7 pading数据填充算法,通过对一些简单算法的实现,从而加深对密码学的理解。理论与实践结合: 课程如果只是讲代码,同学并不能理解接口背后的原理,在项目设计中就会留下隐患,出现错误也不容易排查出问题。如果只讲理论,比如对密码学的一些研究,对于大部分从事工程应用的同学并没有必要,而是理论与实践结合,一切为了工程实践。代码现场打出: 代码不放在ppt而是现场打出,更好的让学员理解代码编写的逻辑,老师现场敲出代码正是展示出了工程项目的思考,每个步骤为什么要这么做,考虑了哪些异常,易学不枯燥: 课程为了确保大部分人开发者都学得会,理解算法原理(才能真正理解算法特性),学会工程应用(接口调用,但不局限接口调用,理解接口背后的机制,并能解决工程中会出现的问题),阅读算法源码但不实现密码算法,,并能将密码学投入到实际工程中,如果是想学习具体的加密算法实现,请关注我后面的课程。

19,469

社区成员

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

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