求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
具体:
RGB和HSL,RGB和YUV,RGB和YCbCr,RGB和Gamma之间的互换公式或者算法(注意:是两个公式,比方说RGB转换到HSL,同时要还有HSL转化到RGB)
另外一定附加HSL,YUV,YCbCr,Gamma的取值范围等,
反正越详细越好.一经完成马上给分.
问题点数:100、回复次数:13Top
1 楼whatkindu(天啊,这里这么多人啊)回复于 2002-12-10 10:40:10 得分 0
没人UP自己UP!UP者也有分.
给大家在给出色系之间转换公式的同时,务必附加上取值范围,
因为我象在程序中调整这几个色系的数值,就象用RGB色系调整亮度一样.
谢谢.Top
2 楼renxiaoyu(一条直线,一个目标)回复于 2002-12-10 16:05:28 得分 0
upTop
3 楼KyosukeNo1(裕作)回复于 2002-12-10 21:45:42 得分 0
关注。
HSL的H取值范围是360,S和L是100。如果要在这个色彩模型中调整亮度,变亮可以调整L至100,继续变亮调整S到0(这时是白色)Top
4 楼noslopforever(天堂里的死神)回复于 2002-12-11 08:28:02 得分 0
关注upTop
5 楼whatkindu(天啊,这里这么多人啊)回复于 2002-12-11 12:14:24 得分 0
谢谢以上三位兄弟,特感谢 KyosukeNo1(裕作),我现实验以下,
另外大家可否给出更多转换算法Top
6 楼KyosukeNo1(裕作)回复于 2002-12-11 21:21:16 得分 70
其实可以打开Photoshop来自己找规律的。
其实HSL的换算我已经找到规律,不过不知道怎么用语言来描述,但又没有时间把他们写成代码......SorryTop
7 楼ghdut(傻瓜)回复于 2002-12-11 21:28:21 得分 0
upTop
8 楼lyzcom(初学者)回复于 2002-12-12 11:20:48 得分 30
我曾经在DOS下写过的一段代码,给你用用吧,在VC下编译可以会出现warnings,不过也没关系:)
#include <math.h>
#define MAX(a, b) (a > b ? a : b)
#define MIN(a, b) (a < b ? a : b)
/* hsv_to_rgb:
* Converts from HSV colorspace to RGB values.
*/
void hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b)
{
float f, x, y, z;
int i;
v *= 255.0;
if (s == 0.0) {
*r = *g = *b = (int)v;
}
else {
while (h < 0)
h += 360;
h = fmod(h, 360) / 60.0;
i = (int)h;
f = h - i;
x = v * (1.0 - s);
y = v * (1.0 - (s * f));
z = v * (1.0 - (s * (1.0 - f)));
switch (i) {
case 0: *r = v; *g = z; *b = x; break;
case 1: *r = y; *g = v; *b = x; break;
case 2: *r = x; *g = v; *b = z; break;
case 3: *r = x; *g = y; *b = v; break;
case 4: *r = z; *g = x; *b = v; break;
case 5: *r = v; *g = x; *b = y; break;
}
}
}
/* rgb_to_hsv:
* Converts an RGB value into the HSV colorspace.
*/
void rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v)
{
float min, max, delta, rc, gc, bc;
rc = (float)r / 255.0;
gc = (float)g / 255.0;
bc = (float)b / 255.0;
max = MAX(rc, MAX(gc, bc));
min = MIN(rc, MIN(gc, bc));
delta = max - min;
*v = max;
if (max != 0.0)
*s = delta / max;
else
*s = 0.0;
if (*s == 0.0) {
*h = 0.0;
}
else {
if (rc == max)
*h = (gc - bc) / delta;
else if (gc == max)
*h = 2 + (bc - rc) / delta;
else if (bc == max)
*h = 4 + (rc - gc) / delta;
*h *= 60.0;
if (*h < 0)
*h += 360.0;
}
}Top
9 楼whatkindu(天啊,这里这么多人啊)回复于 2002-12-12 21:14:51 得分 0
十分感谢以上几位朋友,请问大家是否有Gamma和RGB的互换公式?以及Gamma的取值范围?Top
10 楼whatkindu(天啊,这里这么多人啊)回复于 2002-12-14 14:27:27 得分 0
难道大家都没有Gamma的?Top
11 楼KyosukeNo1(裕作)回复于 2002-12-14 17:55:32 得分 0
其实Gamma是什么呢?色彩模型吗?没有听说过......Top
12 楼whatkindu(天啊,这里这么多人啊)回复于 2002-12-18 11:00:49 得分 0
ACD SEE 5.0里面就有调整Gamma的Top
13 楼KyosukeNo1(裕作)回复于 2002-12-19 17:06:23 得分 0
你说的是那个啊。
它和RGB、HSL、CMYK等不一样,应该不是一种色彩模型啊!调节后感觉上有点象是在调整HSL里面的L值......Top




