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

最佳亮度求法

答題得分者是:yorkland
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-21 15:20:50 IP:211.75.xxx.xxx 未訂閱
我的程式是參考網站寫出來的 希望能夠把亮度的調整數值改成最佳亮度,讓程式自己分析圖片在調整亮度 請問有人會嗎 程式如下  
 
//---------------------------------------------------------------------------
//亮度函數  Brightness function
void __fastcall TForm1::Brightness(Graphics::TBitmap *Bmp,int posi)
{
 Bmp->PixelFormat = pf24bit;
 Byte* ptr=NULL;
 for (int y=0;yHeight ;y  )
 {
   ptr=(Byte*)Bmp->ScanLine[y];
   for (int x=0;xWidth ;x  )
   {
     int R=ptr[x*3 2];
     int G=ptr[x*3 1];
     int B=ptr[x*3];
     int RValue=R posi;
     int GValue=G posi;
     int BValue=B posi;         if (RValue>255)
       ptr[x*3 2]=255;
     else if (RValue<0)
       ptr[x*3 2]=0;
     else
       ptr[x*3 2]=RValue;         if (GValue>255)
       ptr[x*3 1]=255;
     else if (GValue<0)
       ptr[x*3 1]=0;
     else
       ptr[x*3 1]=GValue;         if (BValue>255)
       ptr[x*3]=255;
     else if (BValue<0)
       ptr[x*3]=0;
     else
       ptr[x*3]=BValue;
   }
 }     Brig_Bmp = Bmp;
}
自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-22 17:27:52 IP:220.130.xxx.xxx 未訂閱
最佳亮度的定義是什麼? 也許因人而異。 程式中, 你把每個R,G,B值Offset加上一個定值, 當然在影像上看起來會比較亮。一般影像處理上, 還有auto-level, 會先找出最亮點及最暗點, 然後把最亮點拉到255, 最暗點拉到0, 其他值依等比例計算。 所以大體上, 一種是以offset方式處理, 另一種是以等比例方式處理。
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-24 14:20:58 IP:211.20.xxx.xxx 未訂閱
引言: 最佳亮度的定義是什麼? 也許因人而異。 程式中, 你把每個R,G,B值Offset加上一個定值, 當然在影像上看起來會比較亮。一般影像處理上, 還有auto-level, 會先找出最亮點及最暗點, 然後把最亮點拉到255, 最暗點拉到0, 其他值依等比例計算。 所以大體上, 一種是以offset方式處理, 另一種是以等比例方式處理。
我找到類似的文章 http://delphi.ktop.com.tw/topic.php?topic_id=56625 其中 綾小路 提到的方法好像不錯,既簡單又快速 我試著寫出來下面的測試函數 今天沒法測試明天測出看怎樣的效果在跟大家報告
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y : Integer;
  S1,S2 : String;
begin
  for x:=1 to 256 do
    begin
      S1:=FloatToStr(sqrt(x)*16);
      Memo1.Lines.Add(IntToStr(X)  '=='  S1);
    end;
  for y:=1 to 256 do
    begin
      S2:=IntToStr(Trunc(sqrt(y)*16));
      Memo2.Lines.Add(IntToStr(y)  '=='  S2);
    end;    end;
 
自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-25 11:28:30 IP:211.75.xxx.xxx 未訂閱
感謝yorkland大大提醒可以用等比的方式去調整亮度    以下是我以三角亮度波形為範例做出來的等比亮度變化曲線 自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
系統時間:2024-07-03 5:19:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!