在image里面如何获得鼠标选定的区域,并且鼠标选定的边线用红色表示出来?????(100分)

RGN,PaintRGN
 
将鼠标经过的点记录下来,创建一个多边形区域:CreatePolygonRgn,
然后用FrameRgn对区域的边界进行色彩表示!
 
procedure TViewImgForm.ImageMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
SaveColor : TColor;
SaveStyle : TPenStyle;
SaveMode : TPenMode;
begin
if IplImage <> nil then
if Button = mbLeft then
begin
FMoving := True;
Screen.Cursor := crHandPoint;
if (CurX <> StartX) or (CurY <> StartY) then
begin
SaveColor := Image.Canvas.Pen.Color;
SaveStyle := Image.Canvas.Pen.Style;
SaveMode := Image.Canvas.Pen.Mode;
Image.Canvas.Pen.Color := clBlack;
Image.Canvas.Pen.Style := psDot;
Image.Canvas.Pen.Mode := pmNotXor;
Image.Canvas.Polyline([Point(StartX,StartY),Point(StartX,CurY),
Point(CurX,CurY),Point(CurX,StartY),Point(StartX,StartY)]);
Image.Canvas.Pen.Color := SaveColor;
Image.Canvas.Pen.Style := SaveStyle;
Image.Canvas.Pen.Mode := SaveMode;
end;
StartX := X;
StartY := Y;
CurX := X;
CurY := Y;
end;
end;

procedure TViewImgForm.ImageMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
A : Integer;
P : PByte;
S : string;
SaveColor : TColor;
SaveStyle : TPenStyle;
SaveMode : TPenMode;
begin
if (ssLeft in Shift) and (FMoving) then
begin
X := MinIntValue([IplImage^.Width-1,X]);
X := MaxIntValue([0,X]);
Y := MinIntValue([IplImage^.Height-1,Y]);
Y := MaxIntValue([0,Y]);
SaveColor := Image.Canvas.Pen.Color;
SaveStyle := Image.Canvas.Pen.Style;
SaveMode := Image.Canvas.Pen.Mode;
Image.Canvas.Pen.Color := clBlack;
Image.Canvas.Pen.Style := psDot;
Image.Canvas.Pen.Mode := pmNotXor;
Image.Canvas.Polyline([Point(StartX,StartY),Point(StartX,CurY),
Point(CurX,CurY),Point(CurX,StartY),Point(StartX,StartY)]);
CurX := X;
CurY := Y;
Image.Canvas.Polyline([Point(StartX,StartY),Point(StartX,Y),
Point(X,Y),Point(X,StartY),Point(StartX,StartY)]);
Image.Canvas.Pen.Color := SaveColor;
Image.Canvas.Pen.Style := SaveStyle;
Image.Canvas.Pen.Mode := SaveMode;
end
end;

procedure TViewImgForm.ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

if Button = mbLeft then
begin
if FMoving then
begin
CurX := X;
CurY := Y;
Screen.Cursor := crDefault;
FMoving := False;
Image.Canvas.Polyline([Point(StartX,StartY),Point(StartX,Y),
Point(X,Y),Point(X,StartY),Point(StartX,StartY)]);
end;
end;
end;
 
http://www.truevcl.com
有TMagnify
 
to fhb:
那个东西要Money哦,我没有钱
 
canvas.DrawFocusRect(rect1);
rect1.Right:=x;
rect1.Bottom:=y;
可以直接利用windows的虚线框,效果不错
 
顶部