請問影像亮度的調整? |
尚未結案
|
martialart
一般會員 發表:6 回覆:6 積分:7 註冊:2002-06-15 發送簡訊給我 |
|
chensillin
一般會員 發表:9 回覆:22 積分:6 註冊:2002-08-19 發送簡訊給我 |
引言: 請問要如何調整影像的亮度? 在書上看到一個方法,是用 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 發送簡訊給我 |
引言: 請問要如何調整影像的亮度? 在書上看到一個方法,是用 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 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |