




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本文實(shí)例匯總了Delphi基本圖像處理方法。分享給大家供大家參考。具體分析如下: /浮雕 procedure Emboss(SrcBmp,DestBmp:TBitmap;AzimuthChange:integer;overload; var i, j, Gray, Azimuthvalue, R, G, B: integer; SrcRGB, SrcRGB1, SrcRGB2, DestRGB: pRGBTriple; begin for i := 0 to SrcBmp.Height - 1 do begin SrcRGB := SrcBmp.ScanLinei; DestRGB := De
2、stBmp.ScanLinei; if (AzimuthChange >= -180 and (AzimuthChange < -135 then begin if i > 0 then SrcRGB1 := SrcBmp.ScanLinei-1 else SrcRGB1 := SrcRGB; Inc(SrcRGB1; SrcRGB2 := SrcRGB; Inc(SrcRGB2; end else if (AzimuthChange >= -135 and (AzimuthChange < -90 then begin if i > 0 then SrcR
3、GB1 := SrcBmp.ScanLinei-1 else SrcRGB1 := SrcRGB; SrcRGB2 := SrcRGB1; Inc(SrcRGB2; end else if (AzimuthChange >= -90 and (AzimuthChange < -45 then begin if i > 0 then SrcRGB1 := SrcBmp.ScanLinei-1 else SrcRGB1 := SrcRGB; SrcRGB2 := SrcRGB1; end else if (AzimuthChange >= -45 and (AzimuthC
4、hange < 0 then begin SrcRGB1 := SrcRGB; if i > 0 then SrcRGB2 := SrcBmp.ScanLinei-1 else SrcRGB2 := SrcRGB; end else if (AzimuthChange >= 0 and (AzimuthChange < 45 then begin SrcRGB2 := SrcRGB; if (i < SrcBmp.Height - 1 then SrcRGB1 := SrcBmp.ScanLinei+1 else SrcRGB1 := SrcRGB; end el
5、se if (AzimuthChange >= 45 and (AzimuthChange < 90 then begin if (i < SrcBmp.Height - 1 then SrcRGB1 := SrcBmp.ScanLinei+1 else SrcRGB1 := SrcRGB; SrcRGB2 := SrcRGB1; end else if (AzimuthChange >= 90 and (AzimuthChange < 135 then begin if (i < SrcBmp.Height - 1 then SrcRGB1 := SrcB
6、mp.ScanLinei+1 else SrcRGB1 := SrcRGB; SrcRGB2 := SrcRGB1; Inc(SrcRGB1; end else if (AzimuthChange >= 135 and (AzimuthChange <= 180 then begin if (i < SrcBmp.Height - 1 then SrcRGB2 := SrcBmp.ScanLinei+1 else SrcRGB2 := SrcRGB; Inc(SrcRGB2; SrcRGB1 := SrcRGB; Inc(SrcRGB1; end; for j := 0 to
7、 SrcBmp.Width - 1 do begin if (AzimuthChange >= -180 and (AzimuthChange < -135 then begin Azimuthvalue := AzimuthChange + 180; R:=SrcRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2
8、.rgbtGreen*(45-Azimuthvalue div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end else if (AzimuthChange >= -135 and (AzimuthChange < -90 then begin Azimuthvalue := AzimuthChange + 135; R:=SrcRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthva
9、lue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2.rgbtGreen*(45-Azimuthvalue div 45+78; B:=SrcR GB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end else if (AzimuthChange >= -
10、90 and (AzimuthChange < -45 then begin if j=1 then Inc(SrcRGB1,-1; Azimuthvalue := AzimuthChange + 90; R:=SrcRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2.rgbtGreen*(45-Azimuthvalue
11、 div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end else if (AzimuthChange >= -45 and (AzimuthChange < 0 then begin if j=1 then begin Inc(SrcRGB1,-1; Inc(SrcRGB2,-1; end; Azimuthvalue := AzimuthChange + 45; R:=SrcRGB.rgbtRed-(S
12、rcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2.rgbtGreen*(45-Azimuthvalue div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end else if
13、 (AzimuthChange >= 0 and (AzimuthChange < 45 then begin if j=1 then begin Inc(SrcRGB1,-1; Inc(SrcRGB2,-1; end; Azimuthvalue := AzimuthChange; R:=SrcRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue
14、div 45-(SrcRGB2.rgbtGreen*(45-Azimuthvalue div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end else if (AzimuthChange >= 45 and (AzimuthChange < 90 then begin if j=1 then Inc(SrcRGB2,-1; Azimuthvalue := AzimuthChange - 45; R:=Sr
15、cRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2.rgbtGreen*(45-Azimuthvalue div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+
16、78; end else if (AzimuthChange >= 90 and (AzimuthChange < 135 then begin Azimuthvalue := AzimuthChange - 90; R:=SrcRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2.rgbtGreen*(45-Azi
17、muthvalue div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end else if (AzimuthChange >= 135 and (AzimuthChange <= 180 then begin Azimuthvalue := AzimuthChange - 135; R:=SrcRGB.rgbtRed-(SrcRGB1.rgbtRed*Azimuthvalue div 45-(SrcRGB
18、2.rgbtRed*(45-Azimuthvalue div 45+78; G:=SrcRGB.rgbtGreen-(SrcRGB1.rgbtGreen*Azimuthvalue div 45-(SrcRGB2.rgbtGree n*(45-Azimuthvalue div 45+78; B:=SrcRGB.rgbtBlue-(SrcRGB1.rgbtBlue*Azimuthvalue div 45-(SrcRGB2.rgbtBlue*(45-Azimuthvalue div 45+78; end; R:=Min(R,255; R:=Max(R,0; G:=Min(G,255; G:=Max(
19、G,0; B:=Min(B,255; B:=Max(B,0; Gray := (R shr 2 + (R shr 4 + (G shr 1 + (G shr 4 + (B shr 3; DestRGB.rgbtRed:=Gray; DestRGB.rgbtGreen:=Gray; DestRGB.rgbtBlue:=Gray; if (j=-180 and (AzimuthChange<-135 or (AzimuthChange>=90 and (AzimuthChange<=180 then begin Inc(SrcRGB1; end; if (j=135 and (A
20、zimuthChange<180 or (AzimuthChange>=-180 and (AzimuthChange<=-90 then begin Inc(SrcRGB2; end; Inc(SrcRGB; Inc(DestRGB; end; end; end; procedure Emboss(Bmp:TBitmap;AzimuthChange:integer;ElevationChange:integer;WeightChange:integer;overload; var DestBmp:TBitmap; begin DestBmp:=TBitmap.Create;
21、 DestBmp.Assign(Bmp; Emboss(Bmp,DestBmp,AzimuthChange,ElevationChange,WeightChange; Bmp.Assign(DestBmp; end; /反色 procedure Negative(Bmp:TBitmap; var i, j: Integer; PRGB: pRGBTriple; begin Bmp.PixelFormat:=pf24Bit; for i := 0 to Bmp.Height - 1 do begin PRGB := Bmp.ScanLinei; for j := 0 to Bmp.Width -
22、 1 do begin PRGB.rgbtRed :=not PRGB.rgbtRed ; PRGB.rgbtGreen :=not PRGB.rgbtGreen; PRGB.rgbtBlue :=not PRGB.rgbtBlue; Inc(PRGB; end; end; end; /曝光 procedure Exposure(Bmp:TBitmap; var i, j: integer; PRGB: pRGBTriple; begin Bmp.PixelFormat:=pf24Bit; for i := 0 to Bmp.Height - 1 do begin PRGB := Bmp.Sc
23、anLinei; for j := 0 to Bmp.Width - 1 do begin if PRGB.rgbtRed<128 then PRGB.rgbtRed :=not PRGB.rgbtRed ; if PRGB.rgbtGreen<128 then PRGB.rgbtGreen :=not PRGB.rgbtGreen; if PRGB.rgbtBlue<128 then PRGB.rgbtBlue :=not PRGB.rgbtBlue; Inc(PRGB; end; end; end; /模糊 procedure Blur(SrcBmp:TBitmap; v
24、ar i, j:Integer; SrcRGB:pRGBTriple; SrcNextRGB:pRGBTriple; SrcPreRGB:pRGBTriple; Value:Integer; procedure IncRGB; begin Inc(SrcPreRGB; Inc(SrcRGB; Inc(SrcNextRGB; end; procedure DecRGB; begin Inc(SrcPreRGB,-1; Inc(SrcRGB,-1; Inc(SrcNextRGB,-1; end; begin SrcBmp.PixelFormat:=pf24Bit; for i := 0 to Sr
25、cBmp.Height - 1 do begin if i > 0 then SrcPreRGB:=SrcBmp.ScanLinei-1 else SrcPreRGB := SrcBmp.ScanLinei; SrcRGB := SrcBmp.ScanLinei; if i < SrcBmp.Height - 1 then SrcNextRGB:=SrcBmp.ScanLinei+1 else SrcNextRGB:=SrcBmp.ScanLinei; for j := 0 to SrcBmp.Width - 1 do begin if j > 0 then DecRGB;
26、Value:=SrcPreRGB.rgbtRed+SrcRGB.rgbtRed+SrcNextRGB.rgbtRed; if j > 0 then IncRGB; Value:=Value+SrcPreRGB.rgbtRed+SrcRGB.rgbtRed+SrcNextRGB.rgbtRed; if j < SrcBmp.Width - 1 then IncRGB; Value:=(Value+SrcPreRGB.rgbtRed+SrcRGB.rgbtRed+SrcNextRGB.rgbtRed div 9; DecRGB; SrcRGB.rgbtRed:=value; if j
27、> 0 then DecRGB; Value:=SrcPreRGB.rgbtGreen+SrcRGB.rgbtGreen+SrcNextRGB.rgbtGreen; if j > 0 then IncRGB; Value:=Value+SrcPreRGB.rgbtGreen+SrcRGB.rgbtGreen+SrcNextRGB.rgbtGreen; if j < SrcBmp.Width - 1 then IncRGB; Value:=(Value+SrcPreRGB.rgbtGreen+SrcRGB.rgbtGreen+SrcNextRGB.rgbtGreen div 9
28、; DecRGB; SrcRGB.rgbtGreen:=value; if j > 0 then DecRGB; Value:=SrcPreRGB.rgbtBlue+SrcRGB.rgbtBlue+SrcNextRGB.rgbtBlue; if j > 0 then IncRGB; Value:=Value+SrcPreRGB.rgbtBlue+SrcRGB.rgbtBlue+SrcNextRGB.rgbtBlue; if j < SrcBmp.Width - 1 then IncRGB; Value:=(Value+SrcPreRGB.rgbtBlue+SrcRGB.rgb
29、tBlue+SrcNextRGB.rgbtBlue div 9; DecRGB; SrcRGB.rgbtBlue:=value; IncRGB; end; end; end; /銳化 procedure Sharpen(SrcBmp:TBitmap; var i, j: integer; SrcRGB: pRGBTriple; SrcPreRGB: pRGBTriple; Value: integer; begin SrcBmp.PixelFormat:=pf24Bit; for i := 0 to SrcBmp.Height - 1 do begin SrcRGB := SrcBmp.Sca
30、nLinei; if i > 0 then SrcPreRGB:=SrcBmp.ScanLinei-1 else SrcPreRGB:=SrcBmp.ScanLinei; for j := 0 to SrcBmp.Width - 1 do begin if j = 1 then Dec(SrcPreRGB; Value:=SrcRGB.rgbtRed+(SrcRGB.rgbtRed-SrcPreRGB.rgbtRed div 2; Value:=Max(0,Value; Value:=Min(255,Value; SrcRGB.rgbtRed:=value; Value:=SrcRGB.
31、rgbtGreen+(SrcRGB.rgbtGreen-SrcPreRGB.rgbtGreen div 2; Value:=Max(0,Value; Value:=Min(255,Value; SrcRGB.rgbtGreen:=value; Value:=SrcRGB.rgbtBlue+(SrcRGB.rgbtBlue-SrcPreRGB.rgbtBlue div 2; Value:=Max(0,Value; Value:=Min(255,Value; SrcRGB.rgbtBlue:=value; Inc(SrcRGB; Inc(SrcPreRGB; end; end; end; 圖像的旋
32、轉(zhuǎn)和翻轉(zhuǎn) 以下代碼用ScanLine配合指針移動(dòng)實(shí)現(xiàn),用于24位色! /旋轉(zhuǎn)90度 procedure Rotate90(const Bitmap:TBitmap; var i,j:Integer; rowIn,rowOut:pRGBTriple; Bmp:TBitmap; Width,Height:Integer; begin Bmp:=TBitmap.Create; Bmp.Width := Bitmap.Height; Bmp.Height := Bitmap.Width; Bmp.PixelFormat := pf24bit; Width:=Bitmap.Width-1; Height
33、:=Bitmap.Height-1; for j := 0 to Height do begin rowIn := Bitmap.ScanLinej; for i := 0 to Width do begin rowOut := Bmp.ScanLinei; Inc(rowOut,Height - j; rowOut := rowIn; Inc(rowIn; end; end; Bitmap.Assign(Bmp; end; /旋轉(zhuǎn)180度 procedure Rotate180(const Bitmap:TBitmap; var i,j:Integer; rowIn,rowOut:pRGBT
34、riple; Bmp:TBitmap; Width,Height:Integer; begin Bmp:=TBitmap.Create; Bmp.Width := Bitmap.Width; Bmp.Height := Bitmap.Height; Bmp.PixelFormat := pf24bit; Width:=Bitmap.Width-1; Height:=Bitmap.Height-1; for j := 0 to Height do begin rowIn := Bitmap.ScanLinej; for i := 0 to Width do begin rowOut := Bmp
35、.ScanLineHeight - j; Inc(rowOut,Width - i; rowOut := rowIn; Inc(rowIn; end; end; Bitmap.Assign(Bmp; end; /旋轉(zhuǎn)270度 procedure Rotate270(const Bitmap:TBitmap; var i,j:Integer; rowIn,rowOu Original := Bitmap.Height-Round(j+1*CosTheta-(i+1-SinPoint*SinTheta; iOriginal := Bitmap.Width-Round(i+1*CosTheta-(C
36、osPoint-j-1*SinTheta; end; 270: begin iOriginal := Bitmap.Width-Round(j+1*SinTheta-(i+1-SinPoint*CosTheta; jOriginal := Round(i+1*SinTheta-(CosPoint-j-1*CosTheta-1; end; end; if (iOriginal >= 0 and (iOriginal <= Bitmap.Width-1and (jOriginal >= 0 and (jOriginal <= Bitmap.Height-1 then beg
37、in RowOriginal := Bitmap.ScanlinejOriginal; Inc(RowOriginal,iOriginal; RowRotated := RowOriginal; Inc(RowRotated; end else begin Inc(RowRotated; end; end; end; end; end; /水平翻轉(zhuǎn) procedure FlipHorz(const Bitmap:TBitmap; var i,j:Integer; rowIn,rowOut:pRGBTriple; Bmp:TBitmap; Width,Height:Integer; begin
38、Bmp:=TBitmap.Create; Bmp.Width := Bitmap.Width; Bmp.Height := Bitmap.Height; Bmp.PixelFormat := pf24bit; Width:=Bitmap.Width-1; Height:=Bitmap.Height-1; for j := 0 to Height do begin rowIn := Bitmap.ScanLinej; for i := 0 to Width do begin rowOut := Bmp.ScanLinej; Inc(rowOut,Width - i; rowOut := rowI
39、n; Inc(rowIn; end; end; Bitmap.Assign(Bmp; end; /垂直翻轉(zhuǎn) procedure FlipVert(const Bitmap:TBitmap; var i,j:Integer; rowIn,rowOut:pRGBTriple; Bmp:TBitmap; Width,Height:Integer; begin Bmp:=TBitmap.Create; Bmp.Width := Bitmap.Height; Bmp.Height := Bitmap.Width; Bmp.PixelFormat := pf24bit; Width:=Bitmap.Wid
40、th-1; Height:=Bitmap.Height-1; for j := 0 to Height do begin rowIn := Bitmap.ScanLinej; for i := 0 to Width do begin rowOut := Bmp.ScanLineHeight - j; Inc(rowOut,i; rowOut := rowIn; Inc(rowIn; end; end; Bitmap.Assign(Bmp; end; 亮度、對(duì)比度、飽和度的調(diào)整 以下代碼用ScanLine配合指針移動(dòng)實(shí)現(xiàn)! function Min(a, b: integer: integer;
41、 begin if a < b then result := a else result := b; end; function Max(a, b: integer: integer; begin if a > b then result := a else result := b; end; /亮度調(diào)整 procedure BrightnessChange(const SrcBmp,DestBmp:TBitmap;ValueChange:integer; var i, j: integer; SrcRGB, DestRGB: pRGBTriple; begin for i :=
42、0 to SrcBmp.Height - 1 do begin SrcRGB := SrcBmp.ScanLinei; DestRGB := DestBmp.ScanLinei; for j := 0 to SrcBmp.Width - 1 do begin if ValueChange > 0 then begin DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + ValueChange; DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange; DestRGB.rgbtBlue
43、:= Min(255, SrcRGB.rgbtBlue + ValueChange; end else begin DestRGB.rgbtRed := Max(0, SrcRGB.rgbtRed + ValueChange; DestRGB.rgbtGreen := Max(0, SrcRGB.rgbtGreen + ValueChange; DestRGB.rgbtBlue := Max(0, SrcRGB.rgbtBlue + ValueChange; end; Inc(SrcRGB; Inc(DestRGB; end; end; end; /對(duì)比度調(diào)整 procedure Contra
44、stCh ange(const SrcBmp,DestBmp:TBitmap;ValueChange:integer; var i, j: integer; SrcRGB, DestRGB: pRGBTriple; begin for i := 0 to SrcBmp.Height - 1 do begin SrcRGB := SrcBmp.ScanLinei; DestRGB := DestBmp.ScanLinei; for j := 0 to SrcBmp.Width - 1 do begin if ValueChange>=0 then begin if SrcRGB.rgbtR
45、ed >= 128 then DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + ValueChange else DestRGB.rgbtRed := Max(0, SrcRGB.rgbtRed - ValueChange; if SrcRGB.rgbtGreen >= 128 then DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange else DestRGB.rgbtGreen := Max(0, SrcRGB.rgbtGreen - ValueChange; if
46、SrcRGB.rgbtBlue >= 128 then DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + ValueChange else DestRGB.rgbtBlue := Max(0, SrcRGB.rgbtBlue - ValueChange; end else begin if SrcRGB.rgbtRed >= 128 then DestRGB.rgbtRed := Max(128, SrcRGB.rgbtRed + ValueChange else DestRGB.rgbtRed := Min(128, SrcRGB.rg
47、btRed - ValueChange; if SrcRGB.rgbtGreen >= 128 then DestRGB.rgbtGreen := Max(128, SrcRGB.rgbtGreen + ValueChange else DestRGB.rgbtGreen := Min(128, SrcRGB.rgbtGreen - ValueChange; if SrcRGB.rgbtBlue >= 128 then DestRGB.rgbtBlue := Max(128, SrcRGB.rgbtBlue + ValueChange else DestRGB.rgbtBlue :
48、= Min(128, SrcRGB.rgbtBlue - ValueChange; end; Inc(SrcRGB; Inc(DestRGB; end; end; end; /飽和度調(diào)整 procedure SaturationChange(const SrcBmp,DestBmp:TBitmap;ValueChange:integer; var Grays: array0.767 of Integer; Alpha: array0.255 of Word; Gray, x, y: Integer; SrcRGB,DestRGB: pRGBTriple; i: Byte; begin Valu
49、eChange:=ValueChange+255; for i := 0 to 255 do Alphai := (i * ValueChange Shr 8; x := 0; for i := 0 to 255 do begin Gray := i - Alphai; Graysx := Gray; Inc(x; Graysx := Gray; Inc(x; Graysx := Gray; Inc(x; end; for y := 0 to SrcBmp.Height - 1 do begin SrcRGB := SrcBmp.ScanLineY; DestRGB := DestBmp.Sc
50、anLineY; for x := 0 to SrcBmp.Width - 1 do begin Gray := GraysSrcRGB.rgbtRed + SrcRGB.rgbtGreen + SrcRGB.rgbtBlue; if Gray + AlphaSrcRGB.rgbtRed>0 then DestRGB.rgbtRed := Min(255,Gray + AlphaSrcRGB.rgbtRed else DestRGB.rgbtRed := 0; if Gray + AlphaSrcRGB.rgbtGreen>0 then DestRGB.rgbtGreen := M
51、in(255,Gray + AlphaSrcRGB.rgbtGreen else DestRGB.rgbtGreen := 0; if Gray + AlphaSrcRGB.rgbtBlue>0 then DestRGB.rgbtBlue := Min(255,Gray + AlphaSrcRGB.rgbtBlue else DestRGB.rgbtBlue := 0; Inc(SrcRGB; Inc(DestRGB; end; end; end; /RGB調(diào)整 procedure RGBChange(SrcBmp,DestBmp:TBitmap;RedChange,GreenChang
52、e,BlueChange:integer; var SrcRGB, DestRGB: pRGBTriple; i,j:integer; begin for i := 0 to SrcBmp.Height- 1 do begin SrcRGB := SrcBmp.ScanLinei; DestRGB :=DestBmp.ScanLinei; for j := 0 to SrcBmp.Width - 1 do begin if RedChange> 0 then DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + RedChange else DestR
53、GB.rgbtRed := Max(0, SrcRGB.rgbtRed + RedChange; if GreenChange> 0 then DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + GreenChange else DestRGB.rgbtGreen := Max(0, SrcRGB.rgbtGreen + GreenChange; if BlueChange> 0 then DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + BlueChange else DestRGB.rgb
54、tBlue := Max(0, SrcRGB.rgbtBlue + BlueChange; Inc(SrcRGB; Inc(DestRGB; end; end; end; 顏色調(diào)整 /RGB<=>BGR procedure RGB2BGR(const Bitmap:TBitmap; var X: Integer; Y: Integer; PRGB: pRGBTriple; Color: Byte; begin for Y := 0 to (Bitmap.Height - 1 do begin for X := 0 to (Bitmap.Width - 1 do begin Colo
55、r := PRGB.rgbtRed; PRGB.rgbtRed := PRGB.rgbtBlue; PRGB.rgbtBlue := Color; Inc(PRGB; end; end end; end; /灰度化(加權(quán) procedure Grayscale(const Bitmap:TBitmap; var X: Integer; Y: Integer; PRGB: pRGBTriple; Gray: Byte; begin for Y := 0 to (Bitmap.Height - 1 do begin PRGB := Bitmap.ScanLineY; for X := 0 to (
56、Bitmap.Width - 1 do begin Gray := (77 * Red + 151 * Green + 28 * Blue shr 8; PRGB.rgbtRed:=Gray; PRGB.rgbtGreen:=Gray; PRGB.rgbtBlue:=Gray; Inc(PRGB; end; end; end; 繪圖區(qū)即窗口顯示圖像的區(qū)域,亦可為全屏幕(在全屏幕下繪圖的效果比一般窗口下好) 中心點(diǎn)即要繪圖區(qū)顯示的中心點(diǎn)在原始圖像的坐標(biāo)(聲明:這個(gè)概念特別重要) 先說(shuō)說(shuō)圖像的放大,要放大一張圖片,我們一般的做法是直接放大圖像,但本文介紹的方法僅放大我們能夠看到的部分,放大分兩種情
57、況,一種是放大后比繪圖區(qū)還要小,這種情況沒(méi)什么好說(shuō),當(dāng)然是顯示全部的圖像;第二種是放大后的圖像比繪圖區(qū)大,這才是我們今天要討論的重點(diǎn)話題,這種情況下我們先要確定圖像放大后的大小,然后根據(jù)“中心點(diǎn)”計(jì)算在原始圖像的位置和大小,最后把截取的圖像放大到繪圖區(qū)。 再說(shuō)說(shuō)圖像的漫游,當(dāng)顯示的圖像超過(guò)繪圖區(qū)時(shí),我們需要對(duì)圖像進(jìn)行漫游,以便看到全部的圖像。原理是:當(dāng)鼠標(biāo)在繪圖區(qū)進(jìn)行單擊時(shí),這時(shí)開始漫游,先記錄鼠標(biāo)的單擊位置,然后檢測(cè)鼠標(biāo)的移動(dòng),根據(jù)鼠標(biāo)和上次的位移計(jì)算出“中心點(diǎn)”(需要將屏幕坐標(biāo)轉(zhuǎn)換為原始圖像坐標(biāo)),根據(jù)在上面放大的原理到原始圖像中取出要顯示的部分,放大顯示到繪圖區(qū)。 算法實(shí)現(xiàn)篇: 1.圖像放大 變量定義: PZoom:放大率(整數(shù):100時(shí)為100%,根據(jù)需要可以將 100 該為 10000 或者更大些,但不推薦使用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省遼陽(yáng)太子河區(qū)五校聯(lián)考2024-2025學(xué)年初三月考試卷(二)物理試題含解析
- 永平縣2024-2025學(xué)年三年級(jí)數(shù)學(xué)第二學(xué)期期末聯(lián)考試題含解析
- 江蘇省泰州市泰興市黃橋教育聯(lián)盟重點(diǎn)名校2024-2025學(xué)年初三年級(jí)五月份月考卷語(yǔ)文試題含解析
- 興義市第八中學(xué)2025年高三接軌考試物理試題文試題含解析
- 勞務(wù)分包安全合同
- 抵押車借款合同二零二五年
- 美甲美睫店員工正式聘用合同書范例
- 婚戀中介合同書范例
- 場(chǎng)地租賃保證金合同書二零二五年
- 二零二五商鋪轉(zhuǎn)租租賃簡(jiǎn)單合同書范例
- 福建省能源石化集團(tuán)有限責(zé)任公司招聘筆試真題2024
- 專業(yè)稅務(wù)顧問(wèn)服務(wù)合同范本
- 第8課《集字練習(xí)》課件-【知識(shí)精研】六年級(jí)上冊(cè)書法北師大版
- DB37-T 5312-2025 《建筑施工安全防護(hù)設(shè)施技術(shù)標(biāo)準(zhǔn)》
- 基于Scrum的軟件產(chǎn)品自動(dòng)化測(cè)試框架研究
- 2025年廣東韶關(guān)南雄市衛(wèi)生健康局下屬事業(yè)單位招聘工作人員67人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年度商鋪?zhàn)赓U代理服務(wù)合同(含獨(dú)家代理權(quán))
- 搶救病人護(hù)理書寫規(guī)范
- (完整版)中醫(yī)醫(yī)院醫(yī)療設(shè)備配置標(biāo)準(zhǔn)(2012年)
- 高壓配電室操作規(guī)程(3篇)
- 2025護(hù)坡護(hù)岸施工及驗(yàn)收規(guī)范
評(píng)論
0/150
提交評(píng)論