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)步;