颜色填充算法

afu00 2003-09-12 11:31:59
画一个圆,圆上只知道十六个点颜色,想通过这十六
个点颜色来平均填充此圆,请问有什么办法阿?
...全文
65 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中间的
渐变阿

19,468

社区成员

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

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