作者willy01 (怕庆狗)
看板C_Sharp
标题[问题] RGB转HSI
时间Fri Nov 6 20:35:29 2009
如果用彩色图形RGB转成HSI彩色图形不是看起来会一样吗?
可以请各位大大帮忙我看一下CODE吗? 我哪里有错...可以执行 但执行出来的结
果好像是错的
private void button6_Click(object sender, EventArgs e)
{
try
{
Bitmap p6 = (Bitmap)pictureBox2.Image;
int h_rgb = p6.Height;
int w_rgb = p6.Width;
double tempD;
double theta;
int trans_h;
int trans_s;
int trans_i;
int tempB;
for (int i = 0; i < w_rgb; i++)
{
for (int j = 0; j < h_rgb; j++)
{
//rgb转H
Color c = p6.GetPixel(i, j);
int r = c.R;
int g = c.G;
int b = c.B;
theta = Math.Acos(0.5 * ((r - g) - (r - b)) /
Math.Sqrt((r - g) * (r - g) + (r - b) * (g - b))) / (2 * Math.PI);
tempD = (b <= g) ? theta : (1 - theta);
tempD = (byte)(tempD*255);
trans_h = Convert.ToInt32(tempD);
//RGB转S
tempB = Math.Min(r, g);
tempB = Math.Min(tempB, b);
tempD = 1.0 - 3.0 * tempB / (r + g + b);
tempD = (byte)(tempD*255);
trans_s = Convert.ToInt32(tempD);
//RGB转成I
tempD = (r + g + b) / 3;
tempD = (byte)(tempD) ;
trans_i = Convert.ToInt32(tempD);
p6.SetPixel(i, j, Color.FromArgb(trans_h, trans_h,
trans_i));
}
}
//5.传回
pictureBox2.Image = p6;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.118.131
1F:→ leo60037:色彩空间转换的目的, 不是把转完的值给bitmap 11/07 00:23
2F:→ leo60037:而是转换後, 做一些适合在另一个色彩空间的处理之後 11/07 00:24
3F:→ leo60037:再转回rgb给bitmap 11/07 00:24
4F:→ joetime:感觉用color指令来做点阵图的像素值撷取会很慢 11/07 23:46
5F:→ joetime:而且hsi主要是代表此色彩空间亮彩分离的特性 11/07 23:47
6F:→ joetime:你把hsi的数值直接带入rgb的点阵图的像素值当然会错阿 11/07 23:49
7F:→ joetime:已经是不同的东西了 11/07 23:52
8F:→ willy01:喔喔~~大概知道了 我一直以为要把图再丢回给 bitmap 11/08 21:07