當前正在應用程序中,並試圖從提供的顏色中找到顏色(互補,分割 - 補充,類似,三元組,四方形等)基本顏色。顏色和諧理論和算法,計算互補,三元組,四元等
什麼,我現在在做什麼:
- 轉換RGB顏色到HSV
- 調整水平值,以繞過360度滾輪顏色(S和V值不變)
- 轉換HSV回RGB
下面是三元組的示例(HSV對象表示基色):
colors.Add(new HSVData() { h = hsv.h + 120, s = hsv.s, v = hsv.v });
colors.Add(new HSVData() { h = hsv.h - 120, s = hsv.s, v = hsv.v });
而對於廣場:
colors.Add(new HSVData() { h = hsv.h + 90, s = hsv.s, v = hsv.v });
colors.Add(new HSVData() { h = hsv.h + 180, s = hsv.s, v = hsv.v });
colors.Add(new HSVData() { h = hsv.h + 270, s = hsv.s, v = hsv.v });
RGB到HSV:
public static HSVData RGBtoHSV(RGBResult RGB)
{
double min;
double max;
double delta;
double r = (double)RGB.r/255;
double g = (double)RGB.g/255;
double b = (double)RGB.b/255;
double h;
double s;
double v;
min = Math.Min(Math.Min(r, g), b);
max = Math.Max(Math.Max(r, g), b);
v = max;
delta = max - min;
if (max == 0 || delta == 0)
{
s = 0;
h = 0;
}
else
{
s = delta/max;
if (r == max)
{
// Between Yellow and Magenta
h = (g - b)/delta;
}
else if (g == max)
{
// Between Cyan and Yellow
h = 2 + (b - r)/delta;
}
else
{
// Between Magenta and Cyan
h = 4 + (r - g)/delta;
}
}
h *= 60;
if (h < 0)
{
h += 360;
}
return new HSVData()
{
h = (int)(h/360 * 255),
s = (int)(s * 255),
v = (int)(v * 255)
};
}
HSV到RGB:
public static Color ConvertHsvToRgb(float h, float s, float v)
{
byte MAX = 255;
h = h/360;
if (s > 0)
{
if (h >= 1)
h = 0;
h = 6 * h;
int hueFloor = (int)Math.Floor(h);
byte a = (byte)Math.Round(MAX * v * (1.0 - s));
byte b = (byte)Math.Round(MAX * v * (1.0 - (s * (h - hueFloor))));
byte c = (byte)Math.Round(MAX * v * (1.0 - (s * (1.0 - (h - hueFloor)))));
byte d = (byte)Math.Round(MAX * v);
switch (hueFloor)
{
case 0: return Color.FromArgb(MAX, d, c, a);
case 1: return Color.FromArgb(MAX, b, d, a);
case 2: return Color.FromArgb(MAX, a, d, c);
case 3: return Color.FromArgb(MAX, a, b, d);
case 4: return Color.FromArgb(MAX, c, a, d);
case 5: return Color.FromArgb(MAX, d, a, b);
default: return Color.FromArgb(0, 0, 0, 0);
}
}
else
{
byte d = (byte)(v * MAX);
return Color.FromArgb(255, d, d, d);
}
}
我得到的顏色根據許多在線顏色工具是錯誤的!我應該使用HSV的HSL?我究竟做錯了什麼?
在線工具相比:提前
http://colorschemedesigner.com/
http://www.colorsontheweb.com/colorwizard.asp
謝謝!
向我們展示你的轉換例程,從RGB到HSV和HSV到RGB。並告訴我們*他們怎麼錯了。顯示示例輸入和實際輸出,以及預期輸出。 –
感謝您的回覆,我編輯了我原來的帖子。 – JPSavard