您的位置:首页 > 编程语言 > Delphi

Delphi中一简单图像比较例

2009-11-26 13:30 190 查看
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
TextWidth, TextHeight : Integer;
TmpWidth, TmpHeight : Integer;
Temp : Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Temp := 1021;
Image1.Canvas.TextOut( 0, 0, '0810212334' );
TextWidth  := Image1.Canvas.TextWidth  ( '0810212334' );
TextHeight := Image1.Canvas.TextHeight ( '0810212334' );
Image2.Canvas.TextOut ( 0, 0, IntToStr ( Temp ) );
TmpWidth  := Image2.Canvas.TextWidth  ( IntToStr ( Temp ) );
TmpHeight := Image2.Canvas.TextHeight ( IntToStr ( Temp ) );
end;
procedure TForm1.Button2Click(Sender: TObject);
var
TempStr : String;
i, j, k : Integer;
Flag : boolean;
TmpColor : DWORD;
Mark : Integer;
OldColorPtr : PByteArray;
TmpColorPtr : PByteArray;
begin
Mark := 0;
for i := 0 to TmpHeight - 1 do
begin
OldColorPtr := Image1.Picture.Bitmap.ScanLine [ i ];
TmpColorPtr := Image2.Picture.Bitmap.ScanLine [ i ];
Flag := true;
j := Mark;
while j < TextWidth do
begin
for k := 0 to TmpWidth do
begin
if OldColorPtr [j + k] <> TmpColorPtr[k] then
begin
Flag := false;
break;
end;
end;
inc ( j );
end;
if Flag and ( (j - k) > 0 ) then
Mark := j - k
else
Mark := 0;
end;
if Flag then
ShowMessage ( 'Find the text at + IntToStr (Mark - TmpWidth + 1) + ',0');
Image1.Canvas.Pen.Color := RGB ( $FF, $00, $00 );
Image1.Canvas.Brush.Style := bsClear;
Image1.Canvas.Rectangle( Mark - TmpWidth + 1, 0, Mark, TmpHeight );
end;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐