[問題] RGB轉HSI

看板C_Sharp (C#)作者 (怕慶狗)時間16年前 (2009/11/06 20:35), 編輯推噓0(008)
留言8則, 3人參與, 最新討論串1/1
如果用彩色圖形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

11/07 00:23, , 1F
色彩空間轉換的目的, 不是把轉完的值給bitmap
11/07 00:23, 1F

11/07 00:24, , 2F
而是轉換後, 做一些適合在另一個色彩空間的處理之後
11/07 00:24, 2F

11/07 00:24, , 3F
再轉回rgb給bitmap
11/07 00:24, 3F

11/07 23:46, , 4F
感覺用color指令來做點陣圖的像素值擷取會很慢
11/07 23:46, 4F

11/07 23:47, , 5F
而且hsi主要是代表此色彩空間亮彩分離的特性
11/07 23:47, 5F

11/07 23:49, , 6F
你把hsi的數值直接帶入rgb的點陣圖的像素值當然會錯阿
11/07 23:49, 6F

11/07 23:52, , 7F
已經是不同的東西了
11/07 23:52, 7F

11/08 21:07, , 8F
喔喔~~大概知道了 我一直以為要把圖再丟回給 bitmap
11/08 21:07, 8F
文章代碼(AID): #1Az1WJD9 (C_Sharp)
文章代碼(AID): #1Az1WJD9 (C_Sharp)