線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1737
推到 Plurk!
推到 Facebook!

RGB 2 hsi 存入矩陣之問\題

尚未結案
raiseofevil
一般會員


發表:13
回覆:1
積分:2
註冊:2006-12-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-02 03:39:53 IP:163.28.xxx.xxx 訂閱
[code]
procedure TForm1.RGB2HSIClick(Sender: TObject);
var
i,j,pw,ph: integer;
pt: Pbyte;
BM, mmp: TBitmap;
JP: TJpegImage;
r,g,b: double ;
hh,ss,ii,temp,pi: double ;
begin
pi:=3.1416;
if OD.Execute=true then
begin
//**** Load Jpeg file ****
JP:=TJPEGImage.Create;
JP.LoadFromFile( OD.FileName );
//**** Copy TJpegimage to TBitmap ****
BM:=TBitmap.Create;
BM.Assign( JP );
pw:=BM.Width;
ph:=BM.Height;
//**** TBitmap copy to Map array ****
setlength( Map, ph );
for j:=0 to bm.Height-1 do
begin
setlength( Map[j], pw );
end;
for i:=0 to ph-1 do
begin
pt:=BM.ScanLine[i];
move( pt^, Map[i,0 ], pw*3 );
end;
//**** Image process RGB to HSI ****
for i:=0 to ph-1 do
begin
for j:=0 to pw-1 do
begin
b:= map[i,j].B; //byte資料型態,存入double 的型態
g:= map[i,j].G ;
r:= map[i,j].R ;
//--先計算H S I -------------
ii:=(b g r)/ 3 ; //算出i 值
//******
if((r g b)=0) then
ss:=0
else
ss:=1-(3*(min(min(r,g),b))/ (r g b)); //計算Saturation
//************
if((((r-g)*(r-g)) ((r-b)*(g-b)))=0) then //依據公式,此判斷式=0表示分子為0
hh:=0
else
temp:=((r-g) (r-b))/(2*sqrt(((r-g)*(r-g)) ((r-b)*(g-b))));
if(g>=b) then
hh:=cos(temp) //計算Hue,徑度量
//hh=acos(temp)*180/pi; //計算Hue,度度量
else
hh:=2*pi-cos(temp); //計算Hue,徑度量
//hh=(2*pi-acos(temp))*180/pi; //計算Hue,度度量
//請問我將H S I 的值算出後,為了將他們顯示出來,故將h,s,i分別代入矩陣中,為什麼不能代入勒?
map[i,j].G :=hh; //
map[i,j].G :=ss;
map[i,j].R :=ii;

end;
end;



//***********************
//**** Copy Map array to TBitmap to show the image *****
mmp:=TBitmap.Create;
mmp.PixelFormat:=pf24bit;
mmp.Width:=BM.Width;
mmp.Height:=BM.Height;
for j:=0 to mmp.Height-1 do
begin
pt:=mmp.ScanLine[j];
move( Map[j,0], pt^, mmp.Width*3 );
end;
image1.Picture.Bitmap.Assign(mmp);
mmp.Free;
BM.Free;
JP.Free;
end;
end;
[/code]
系統時間:2024-04-20 4:13:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!