问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

200分求渐变填充色 算法

发布网友 发布时间:2022-04-28 11:30

我来回答

3个回答

热心网友 时间:2023-10-05 12:58

教你个利用双线性插值的方法,我是学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就小....所以他呈现渐变分布..

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

热心网友 时间:2023-10-05 12:58

(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)
{
*Y = 0.299*R + 0.587*G + 0.114*B;
*U = 0.492 * (B - *Y);
*V = 0.877 * (R - *Y);
}

void YUVtoRGB(float Y, float U, float V,float *R,float *G,float *B)
{
*R = Y + 1.140 * V;
*G = Y - 0.395 * U - 0.581 * V;
*B = Y + 2.032 * U;
if ( *R < 0.0) *R = 0.0;
if ( *G < 0.0) *G = 0.0;
if ( *B < 0.0) *B = 0.0;
}

void main()
{
float R1,B1,G1;
float R2,B2,G2;
float Y1,U1,V1;
float Y2,U2,V2;
int i,N=10;
float R[10],G[10],B[10];
float Y[10],U[10],V[10];
printf("Enter R1 B1 G1\n");
scanf("%f %f %f",&R1,&G1,&B1);
printf("Enter R2 B2 G2\n");
scanf("%f %f %f",&R2,&G2,&B2);
(void) RGBtoYUV(R1,G1,B1,&Y1, &U1, &V1);
(void) RGBtoYUV(R2,G2,B2,&Y2, &U2, &V2);
// (void) RGBtoHSV(R1,G1,B1,&Y1, &U1, &V1);
// (void) RGBtoHSV(R2,G2,B2,&Y2, &U2, &V2);

for (i=0;i<N;i++){
Y[i] = Y1 + (Y2-Y1)/ (N-1) * i;
U[i] = U1 + (U2-U1)/ (N-1) * i;
V[i] = V1 + (V2-V1)/ (N-1) * i;
(void) YUVtoRGB(Y[i], U[i], V[i],&R[i],&G[i],&B[i]);
// (void) HSVtoRGB(Y[i], U[i], V[i],&R[i],&G[i],&B[i]);
}

for (i=0;i<N;i++)printf("%.0f %.0f %.0f\n",R[i],G[i],B[i]);
}

热心网友 时间:2023-10-05 12:58

教你个利用双线性插值的方法,我是学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就小....所以他呈现渐变分布..

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

热心网友 时间:2023-10-05 12:58

(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)
{
*Y = 0.299*R + 0.587*G + 0.114*B;
*U = 0.492 * (B - *Y);
*V = 0.877 * (R - *Y);
}

void YUVtoRGB(float Y, float U, float V,float *R,float *G,float *B)
{
*R = Y + 1.140 * V;
*G = Y - 0.395 * U - 0.581 * V;
*B = Y + 2.032 * U;
if ( *R < 0.0) *R = 0.0;
if ( *G < 0.0) *G = 0.0;
if ( *B < 0.0) *B = 0.0;
}

void main()
{
float R1,B1,G1;
float R2,B2,G2;
float Y1,U1,V1;
float Y2,U2,V2;
int i,N=10;
float R[10],G[10],B[10];
float Y[10],U[10],V[10];
printf("Enter R1 B1 G1\n");
scanf("%f %f %f",&R1,&G1,&B1);
printf("Enter R2 B2 G2\n");
scanf("%f %f %f",&R2,&G2,&B2);
(void) RGBtoYUV(R1,G1,B1,&Y1, &U1, &V1);
(void) RGBtoYUV(R2,G2,B2,&Y2, &U2, &V2);
// (void) RGBtoHSV(R1,G1,B1,&Y1, &U1, &V1);
// (void) RGBtoHSV(R2,G2,B2,&Y2, &U2, &V2);

for (i=0;i<N;i++){
Y[i] = Y1 + (Y2-Y1)/ (N-1) * i;
U[i] = U1 + (U2-U1)/ (N-1) * i;
V[i] = V1 + (V2-V1)/ (N-1) * i;
(void) YUVtoRGB(Y[i], U[i], V[i],&R[i],&G[i],&B[i]);
// (void) HSVtoRGB(Y[i], U[i], V[i],&R[i],&G[i],&B[i]);
}

for (i=0;i<N;i++)printf("%.0f %.0f %.0f\n",R[i],G[i],B[i]);
}

热心网友 时间:2023-10-05 12:59

分别把起始色的R G B值加上结束色的R G B值 得出的合除2

这样不行啊 呵呵 那你把图片发大到500倍用 吸取工具吸取中间的颜色

这样可以吗

热心网友 时间:2023-10-05 12:59

分别把起始色的R G B值加上结束色的R G B值 得出的合除2

这样不行啊 呵呵 那你把图片发大到500倍用 吸取工具吸取中间的颜色

这样可以吗
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么样才能聚财 花呗额度怎么提升最快? 还在为word排版而发愁?word的实验报告模板&amp;word数学建模模板免费领... 如何鉴定骨伤是新伤和陈旧伤 夕阳无限好只是近黄昏古诗 ...其他人都无问题,确定网络连接无问题,请问是什么原因? 描写花朵从花蕾到开放的句子 描写花蕾的优美句子 ...毒毛和鲜艳色斑,一般食虫鸟不敢捕食,这在生物学上属于…( )A.保护... 安徽名人出身地 求十进制数字转换为16进制的渐变算法 要手算的 比熊犬喜欢什么玩具? 图形图像软件中对两个色彩进行线性渐变的算法是什么?是以AB两点色彩(假设为rgb制)的三个参数以及 颜色渐变算法 渐变算法 在Css中如何设置span的背景颜色和背景图片 求教.OBS怎么录制QQ窗口.不想使用桌面获取 obs录制怎么用啊 信用记录有不良能贷小额贷款吗? 以前征信不是很好,平安银行小额贷款能批下来吗? 信用不好可以借款吗 信用低还可以申请小额贷款吗 信用分底可以小额借钱吗? 台式电脑插上耳机没声音怎么办?而且控制面板里也没有音频管理器。 ASUS Realtek高清晰音频管理器,耳麦无声音。 笔记本电脑 win10系统更新后,插耳机没反应,没发找到realtek音频管理器 为什么我设置了Realtek高清音频管理器耳机还是没声音 电脑插耳机后不打开Realtek高清晰音频管理器就没声音 我家的电脑插上耳机没有声音啊,可是也找不到“Realtek高清晰音频管理器”啊!怎么办! win10笔记本插入耳机没声音,在Realtek高清晰音频管理器按百度上的说法都试过了都解决不了 迷你牛头梗、法国斗牛、比熊、玩具犬养哪个好? 用渐变方法计算128+349+72这是运用什么? 玩具比熊犬会长大吗 1又3分之1乘8分之5加2又7分之2乘8分之3 怎么写?渐变算法 什么是玩具比熊??? 渐变体积怎么算 请问下高速公路中的超高渐变如何计算 比熊犬的优缺点 176乘38加66乘176减176乘4渐变计算 0.83+0.79+0.17+12.11能简便 吗? 偶问一下爱斯基摩玩具犬、蝴蝶犬、日本狐狸犬、法连尼犬、比熊犬、泰迪犬的价格 渐变段时计算每根钢筋的长度? 玩具贵宾和比熊幼犬怎么区分 JavaScript如何计算两个颜色之间的渐变色值 长不大的玩具狗有哪些?(非贵宾、比熊之类的名犬) 想问下关于公路渐变段问题,这个是不是三次抛物线求渐变段?怎么计算? 比熊犬和玩具贵宾犬哪种比较好养? 怎么更好计算道路超高渐变啊 当归有什么药用? 高速公路渐变段长度为80米,渐变宽度为4米,我还需要那些数据才能计算任意一处渐变段的宽度呢,求解?