200分求渐变填充色 算法

来源:百度知道 编辑:UC知道 时间:2024/06/11 16:49:01
有一个矩形区域,我要用一个线性渐变去填充,我定一个起始色(rgb)和结束色,我想算中间色怎么算啊,中间色应该是根这个点的位置相关的
但肯定不是取中间值那么简单,我试过,取中间值算出来的画上去很不自然,
如果算法正确我会再加50分
121038 的方法,我有空的时候去试一下,先谢过

教你个利用双线性插值的方法,我是学VB的,C的不懂,代码就不能贴了,只能说下如何运算..剩下的就要靠你自己了

1.首先计算缩放比例..bl=2/w...2是原图宽度(因为只有2个颜色)...w是放大后的宽度
2.开始循环,从1循环到目标宽度w,假设循环变量为i...就用n=i*bl
3.取出n的小数部分存到变量p中..然后合成颜色,目标色R=R1*(1-p)+R2*p G=G1*(1-P)+G2*p B=B1*(1-P)+B2*p....R1/G1/B1是起始色的红/绿/蓝色,R2/G2/B2是结束色的红/绿/蓝色.

这个算法是什么原理呢,我说一下,算出的n=i*bl就是一个小数值.假如他是1.3,那么他靠1颜色就近些,所以1颜色对他的影响就大,所以R1*(1-p)+R2*p就体现了1颜色影响的范围大,2颜色影响小..假如是1.7,那么2颜色对他的影响大,1就小....所以他呈现渐变分布..

而双线性插值一般用语图像放大缩小..

(1) RGB to YUV 或 HSV
(2) 线性内插YUV 或 HSV
(3) YUV 或 HSV to RGB

最好用HSV,但 RGB 到 HSV 和 HSV 到 RGB 的转换 难写一点,请自己写吧。

HSV(也叫HSB):
H:色相,范围0~360,每隔60度表示一种基本颜色(其他度数在是相邻的基本度数之间的颜色):红(RGB(255,0,0))->黄(RGB(255,255,0))->绿(RGB(0,255,0))->青(RGB(0,255,255))->蓝(RGB(0,0,255))->紫(RGB(255,0,255))->红
S:纯度(也翻译为色饱和度)。
V:亮度。

下面以YUV为例,首尾加内插点N = 10。

#include <stdio.h>

void RGBtoYUV(float R,float G,float B,float *Y, float *U, float *V)