全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4868
推到 Plurk!
推到 Facebook!

請問影像亮度的調整?

尚未結案
martialart
一般會員


發表:6
回覆:6
積分:7
註冊:2002-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-10 17:45:50 IP:210.201.xxx.xxx 未訂閱
請問要如何調整影像的亮度? 在書上看到一個方法,是用 GetPixel()取出每一個pixel的RGB值,再分別將RGB值加上一個數量,然後再用SetPixel()寫回。這樣的做法是可以改變圖形的亮度沒錯,可是必須用迴圈處裡每一個pixel,如果是比較大的影像,例如800*600以上的影像,就會需要比較多的時間。無法像一些影像處理軟體,可以立即調整亮度。 請問有沒有比較快的方式,謝謝...
chensillin
一般會員


發表:9
回覆:22
積分:6
註冊:2002-08-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-20 23:56:30 IP:163.28.xxx.xxx 未訂閱
引言: 請問要如何調整影像的亮度? 在書上看到一個方法,是用 GetPixel()取出每一個pixel的RGB值,再分別將RGB值加上一個數量,然後再用SetPixel()寫回。這樣的做法是可以改變圖形的亮度沒錯,可是必須用迴圈處裡每一個pixel,如果是比較大的影像,例如800*600以上的影像,就會需要比較多的時間。無法像一些影像處理軟體,可以立即調整亮度。 請問有沒有比較快的方式,謝謝...
附上曾在bbs中看到討論的! ================================================================== Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); 有什麼方法 把 Image1上面的 RBG資料 存到一個矩陣裡面呀! R = GetRValue(Image1->Canvas->Pixels[i][j]); G = GetGValue(Image1->Canvas->Pixels[i][j]); B = GetBValue(Image1->Canvas->Pixels[i][j]); 這種方法的確真的太慢了.....你是使用Bitmap檔嗎!? 你可以使用前面討論的文章"show 圖"裡面的ScanLine方式, 速度上快多了! 不過比較好的方法是是用API的GetDIBits和SetDIBits,直接去 設定Bitmap的Raw Data! Help裡面有詳細的解說,不然就去翻翻programming windows這類 講SDK的書囉! ================================================================= 下列是找到,並且我試過用scanline真的較快 Byte *ptr,Gray; for (int y = 0; y < Image1->Height; y ) { ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[y]; for (int x = 0; x < Image1->Width*3; x=x 3) { Gray = (ptr[x]*28 ptr[x 1]*151 ptr[x 2]*77)/256; ptr[x] = Gray; ptr[x 1] = Gray; ptr[x 2] = Gray; } } Image1->Invalidate();
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-21 08:35:37 IP:203.73.xxx.xxx 未訂閱
引言: 請問要如何調整影像的亮度? 在書上看到一個方法,是用 GetPixel()取出每一個pixel的RGB值,再分別將RGB值加上一個數量,然後再用SetPixel()寫回。這樣的做法是可以改變圖形的亮度沒錯,可是必須用迴圈處裡每一個pixel,如果是比較大的影像,例如800*600以上的影像,就會需要比較多的時間。無法像一些影像處理軟體,可以立即調整亮度。 請問有沒有比較快的方式,謝謝...
影像變亮-->RGB各加上一個值(最大值上限為255) 影像變暗-->RGB各減上一個值(最小值下限為0) 800x600會很慢?? 不會吧 如果只是處理 Brightness 的話 即使影像大小為 1200x1800 使用的時間也不會超過1秒 不過~~我不是使用GetPixel or SetPixel 而是用最傳統的方式(Memory Walk)寫的
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-17 13:04:31 IP:203.75.xxx.xxx 未訂閱
請教 chensillin 一下, Gray = (ptr[x]*28 + ptr[x+1]*151 +ptr[x+2]*77)/256; 是如何得知的, 再請教 RaynorPao memory walk 要如何 implement.    Jesse Chan
------
Jesse Chan
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-17 13:20:26 IP:140.135.xxx.xxx 未訂閱
jessechan您好:  
引言: 1. Gray = (ptr[x]*28 ptr[x 1]*151 ptr[x 2]*77)/256; 是如何得知的, 2. 再請教 RaynorPao memory walk 要如何 implement.
1. ptr[x], ptr[x 1], ptr[x 2] 的順序是 B,G,R RGB轉灰階的公式Gray=(B*28 G*151 R*77)/256 可參考下面連結的精采討論: http://delphi.ktop.com.tw/topic.php?topic_id=22731 2.我想應該是用TMemoryStream將除了檔頭資訊以外的RGB依序讀出來吧 可能要請RaynorPao寫個精采的範例囉~~< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~
integrand
一般會員


發表:8
回覆:27
積分:17
註冊:2002-10-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-17 13:58:11 IP:218.163.xxx.xxx 未訂閱
引言: jessechan您好: 1. ptr[x], ptr[x 1], ptr[x 2] 的順序是 B,G,R RGB轉灰階的公式Gray=(B*28 G*151 R*77)/256 可參考下面連結的精采討論: http://delphi.ktop.com.tw/topic.php?topic_id=22731 2.我想應該是用TMemoryStream將除了檔頭資訊以外的RGB依序讀出來吧 可能要請RaynorPao寫個精采的範例囉~~ < face="Verdana, Arial, Helvetica"> 以前用的轉換的公式 都是把三個值取平均值 我想這東西應該是看自己想怎麼轉 從檔頭來看 位元數、大小不論 有的有調色盤 要讀出來產生邏輯調色盤 有的經過RLE壓縮 要針對這些寫不同的處理 感覺很麻煩
800
一般會員


發表:2
回覆:7
積分:1
註冊:2003-04-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-20 23:45:18 IP:61.59.xxx.xxx 未訂閱
要調整影像亮度的話請將 RGB 轉換到不同的 color system, 比如 HSI 或 YUV 如果轉換到 HSI 的話直接調 I 的值就可以了
系統時間:2024-04-19 19:35:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!