procedure pbBarPaint(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } BarData:array[0..255]of Byte; Bar:TVczhBitmap; procedure DrawBar; end; var frmProcessor: TfrmProcessor; implementation {$R *.dfm} uses untViewer; procedure TfrmProcessor.DrawBar; var I:Integer; begin Bar.Canvas.FillRect(Bar.Canvas.ClipRect); Bar.Canvas.MoveTo(0,255-BarData[0]); for I:=1 to 255 do Bar.Canvas.LineTo(I,255-BarData[I]); end; procedure TfrmProcessor.FormCreate(Sender: TObject); begin Bar:=TVczhBitmap.Create; Bar.Width:=256; Bar.Height:=256; Bar.Canvas.Brush.Color:=clWhite; Bar.Canvas.Brush.Style:=bsSolid; end; procedure TfrmProcessor.FormDestroy(Sender: TObject); begin Bar.Free; end; procedure TfrmProcessor.FormShow(Sender: TObject); var I:Integer; begin for I:=0 to 255 do BarData[I]:=I; DrawBar; end; procedure TfrmProcessor.pbBarPaint(Sender: TObject); begin pbBar.Canvas.Draw(0,0,Bar); end; procedure TfrmProcessor.Button1Click(Sender: TObject); var X,Y:Integer; begin for Y:=0 to Buffer.Height-1 do for X:=0 to Buffer.Width*3-1 do Played.Bytes[X,Y]:=BarData[Buffer.Bytes[X,Y]]; frmViewer.FormPaint(frmViewer); end; end. 之后,做一个窗口继承自它,则调整BarData[]后,按Apply即可看到结果。 现在开始将图像处理。具体效果见示例程序。 一、颜色反转。 灰度图像的颜色都是从0~255,所以,为了使颜色反转,我们可以用255减去该颜色值以得到反转后的颜色。 var I:Integer; begin inherited; for I:=0 to 255 do BarData[I]:=255-I;//用255减去该颜色值 DrawBar; pbBarPaint(pbBar); end; 二、缩小颜色范围以增强或减弱亮度 颜色本来是从0~255的。如果调节它的范围,例如从0~16,则会是图像明显变暗。我们可以把起始值设为a,把终止值设为b,则新的颜色值New=a+(b-1)*Old/255。这样做的话可以改变亮度,并且不会破坏原先颜色的顺序。代码如下 var I:Integer; begin for I:=0 to 255 do BarData[I]:=(255-sbMin.Position)+Round((sbMin.Position-sbMax.Position)/255*I); DrawBar; pbBarPaint(pbBar); Button1Click(Button1); end; 这里的sbMin.Position和sbMaxPosition都是反转过的。所以使用时要用255去减 三、增加某个范围内的颜色范围 如果图像本身的颜色范围很小的画,你可以通过这种方法来加大图像的对比度,有利于对图像的分析。具体做法: 选取一个值a做为起始值,选取一个值b做为终止值,然后按以下公式变形: | 0 (X<=a) f(X)= | 255/(b-a)*(X-a) | 255(X>=b) var I:Integer; begin for I:=0 to 255 do begin 上一页 [1] [2] [3] 下一页 没有相关教程
|