1. 求一个计算RGB颜色值的算法,色差要尽量大,从黑色到白色之间可以计算出来100个以上颜色,尽量用C++
在RGB颜色模型下,要100个颜色设一个变量从0到0x1000000之间分成100递增即可,颜色差值最大。
用javaapplet最简演示,附图。从黑到白100个颜色块
=====
importjava.applet.Applet;
importjava.awt.Color;
importjava.awt.Graphics;
publicclassTestextendsApplet{
=1802199483736051124L;
publicintnum_of_colors;
@Override
publicvoidinit(){
num_of_colors=100;//如果要多可以设得更多
}
@Override
publicvoidpaint(Graphicsg){
introw_max=(int)Math.sqrt(num_of_colors);
intcol_w=getWidth()/row_max;
intx=0,y=0;
intcd=(int)(0x1000000L/num_of_colors);
intc=0;
for(intn=0;n<num_of_colors;n++){
g.setColor(newColor(c));
g.fillRect(x,y,col_w,col_w);
c+=cd;
if(n%row_max==0&&n>0){
x=0;
y+=col_w;
}elsex+=col_w;
}
}
}
2. RGB函数计算公式:颜色值=(65536*blue)+(256*green)+(red)
65536是256的二次方,
RGB是以256进制的数字,也就是说R上的m相当于G上的256*m,相当于B上的256*256*m.
G上的n相当于B上的256*n.
所以你的数字好像写错了,应该是:
颜色值=(65536*Red)+(256*Green)+(Blue)
3. 颜色相似度求教..一个颜色可以分解成R,G,B三个值...那么两个颜色的R,G,B是通过怎么样计算得到它们的相似度
判断两色素颜色的相似度 算法
在RGB颜色模型中,R,G,B三个分量相当于三位空间的x轴,y轴和z轴,这样一来,判断两象素的相似度即计算两个像素在RGB空间的距离(色差),代码如下:Const int Distance=150; //设置阀值,小于Distance就可认定像素a和像素b相似
BOOL ColorComp(int ar,int ag,int ab,int br,int bg,int bb)
{
//通过HSV比较两个子RGB的色差
//比较两个RGB的色差
int absR=ar-br;
int absG=ag-bg;
int absB=ab-bb;
if(sqrt(absR*absR+absG*absG+absB*absB)<Distance)
return TRUE;
return FALSE;
}
如果觉得我的回答能对你有所帮助,就请采纳我一下吧~ ^-^ 谢谢
4. 颜色三属性 1.哪三属性.各为带E属性.各有什么决定 2.颜色标号(比较.描述) 3.颜色的分类 4.V与C关系
……有好几种算法的,一是红R绿G蓝U 还有 色调E,饱和度S 亮度 L色调(也称色名)H 明度V 彩度C 颜色标号色调环上以红(R)、黄(Y)、绿(G)、蓝(B)、紫(P)5色作为主色,并以红为色调环逆时针方向的起点。在相邻两个主色中间的颜色为中间色,即;红黄(YR)、黄绿(GY)、绿蓝(BC)、蓝紫(PB)、紫红(RP)色调的标号方式为数值10-2.5-5-7.5-10前一个10是本色调的起点0,也是上一个色调的终点,后一个10是本色调的终点,也是下一个色调的起点0.(单色调起于0终于10终),数字后附以基本色的标号,如,10YR。凡标号为“5”的色调,是颜色的纯正色调。任何颜色都可以用色立体上的色调、明度和彩度进行标定,并给予一定标号。标号方法是先写出色调H,然后写明度V,在斜线后写彩度C; HV/C=色调 明度/彩度 如 粉 红10RP4.5/13 参考文献 http://lz2009313.blog.163.com/blog/static/111961168200911271917154/ 颜色分类推荐下面的网站 http://wenku..com/view/35a7337d27284b73f242508b.html以及 http://tui.qihoo.com/22458339/article_718340.html V与C关系 明度越高,看起来亮度越高、彩度越高,看起来越鲜艳(黑色和白色是无彩色,其中黑色明度最低,白色明度最高)。 是指色彩的纯度, 通常以某彩色的的同色名纯色所占的比例, 来分辨彩度的高低, 纯色比例高为彩度高, 纯色比例低为彩度低, 在色彩鲜艳状况下, 我们通常很容易感觉高彩度, 但有时不易作出正确的判断, 因为容易受到明度得影响
5. 颜色渐变算法
//r1, r2 是红色 从r1 到r2.
//g: 绿色 from g1 to g2
//b: from b1 to b2
//从颜色 rgb(r1, g1, b1) 到 rgb(r2, g2, b2) 渐变
void FillFluentRect(HDC hDC, RECT rect, byte r1, byte g1, byte b1, byte r2, byte g2, byte b2)
{
int iWidth = rect.right - rect.left;
int iHeight = rect.bottom - rect.top;
short rDif = r2 - r1;
short gDif = g2 - g1;
short bDif = b2 - b1;
for(int i = 0; i < iWidth; i++)
{
byte rCur, gCur, bCur;
rCur = r1 + (short)(float)(((float)rDif/(float)iWidth)*(float)i);
gCur = g1 + (short)(float)(((float)gDif/(float)iWidth)*(float)i);
bCur = b1 + (short)(float)(((float)bDif/(float)iWidth)*(float)i);
for(int y = 0; y < iHeight; y++)
SetPixel(hDC, rect.left + i, rect.top + y,
RGB(rCur, gCur, bCur));
}
}
6. 计算2个颜色的相似度
请参考下面的算法,类似于求方差
//调用示例MsgBox 颜色相似("fe3333","ff3333", 0.9)
Function 颜色相似(当前颜色, 对比颜色, 相似度)//相似度为0到1之间的数If 0<=相似度<=1 thenCall Plugin.Color.ColorToRGB(当前颜色, R1, G1, B1)Call Plugin.Color.ColorToRGB(对比颜色, R2, G2, B2)If abs(R1 - R2) < 255 * (1 - 相似度) and abs(G1 - G2) < 255 * (1 - 相似度) and abs(B1 - B2) < 255 * (1 - 相似度) Then 颜色相似 = "相似"Else 颜色相似 = "不相似"End IfElse 颜色相似 = "相似度出错"End ifEnd Function
7. 一道颜色深度题,请给出算法,谢谢。
颜色深度简单说就是最多支持多少种颜色。一般是用“位”来描述的。
举个例子,如果一个图片支持256种颜色(如GIF格式),那么就需要256个不同的值来表示不同的颜色,也就是从0到255。用二进制表示就是从00000000到11111111,总共需要8位二进制数。所以颜色深度是8。
如果是BMP格式,则最多可以支持红、绿、蓝各256种,不同的红绿蓝组合可以构成256的3次方种颜色,就需要3个8位的2进制数,总共24位。所以颜色深度是24。
还有PNG格式,这种格式除了支持24位的颜色外,还支持alpha通道(就是控制透明度用的),总共是32位。
颜色深度越大,图片占的空间越大。
8. 在java中,如何判断两个颜色是否相同
可以用扫描线种子算法
扫描线种子填充算法的基本过程如下:当给定种子点(x,
y)时,首先分别向左和向右两个方向填充种子点所在扫描线上的位于给定区域的一个区段,同时记下这个区段的范围[xleft,
xright],然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。反复这个过程,直到填充结束。
扫描线种子填充算法可由下列四个步骤实现:
(1)
初始化一个空的栈用于存放种子点,将种子点(x,
y)入栈;
(2)
判断栈是否为空,如果栈为空则结束算法,否则取出栈顶元素作为当前扫描线的种子点(x,
y),y是当前的扫描线;
(3)
从种子点(x,
y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xleft和xright;
(4)
分别检查与当前扫描线相邻的y
-
1和y
+
1两条扫描线在区间[xleft,
xright]中的像素,从xleft开始向xright方向搜索,若存在非边界且未填充的像素点,则找出这些相邻的像素点中最右边的一个,并将其作为种子点压入栈中,然后返回第(2)步;