//这是一种直接处理的方法 procedure TForm1.Button1Click(Sender: TObject); var lo:tbitmap; i,j:integer; kl:longint; rr,gg,bb:byte; res:byte; begin lo:=tbitmap.create; lo.Width:=image1.Width; lo.height:=image1.height; ProgressBar1.Max:=image1.Width+1; for i:=0 to image1.Width+1 do begin for j:=0 to image1.height+1 do begin kl:=ColorToRGB(image1.Canvas.Pixels[i,j]); rr:=byte(kl); gg:=byte(kl shr 8); bb:=byte(kl shr 8); res:=(rr+gg+bb) div 3; lo.Canvas.Pixels[i,j]:=rgb(res,res,res); end; ProgressBar1.Position:=i; end;//for do image1.Canvas.Draw(0,0,lo); lo.free; end;
//这是一种灰度转换的算法 function RgbToGray(Source: TColor) : TColor; var Target: Byte; begin Target := Round((0.30 * GetRValue(Source)) + (0.59 * GetGValue(Source)) + (0.11 * GetBValue(Source))); Result := RGB(Target, Target, Target); end;
|