qq_30877677 2015-10-28 08:46 采纳率: 36.7%
浏览 3218
已采纳

Delphi 在图片上画矩形

在image加载的图片上画矩形,会将图片覆盖,代码如下:
unit Unit3;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
TForm3 = class(TForm)
img1: TImage;
dlgOpen1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure img1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure img1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure img1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

{$R *.dfm}
var
cx, cy: Integer;
md: Boolean;

procedure TForm3.FormCreate(Sender: TObject);
var
openPath: string;
begin
dlgOpen1.Title := '打开图片';
dlgOpen1.Filter := '全部 (*.jpg;*.jpeg;*.bmp;)';

if dlgOpen1.Execute then
begin
openPath := dlgOpen1.FileName;
img1.Picture.LoadFromFile(openPath);
img1.AutoSize := False;
img1.Stretch := True;
end;
Form3.DoubleBuffered := true;
md := False;

end;

procedure TForm3.img1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
md := True;
cx := x;
cy := y;
end;

procedure TForm3.img1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if md then
begin
// img1.Canvas.Brush.Color := clWhite; //画笔颜色设置为白色
// img1.Canvas.Brush.Style := bsclear;
//img1.Canvas.FillRect(img1.ClientRect); //把画布背景填充为白色
img1.Canvas.Pen.Color := clRed;
img1.Canvas.Rectangle(cx, cy, X, Y);

end;
end;

procedure TForm3.img1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
md := False;
end;

end.

  • 写回答

3条回答 默认 最新

  • lyhoo163 2015-11-05 23:36
    关注

    使用FrameRect 用指定的刷子围绕一个矩形画一个边框。

    procedure TForm3.img1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
    if md then
    begin
    img1.Canvas.Brush.Color := clWhite; //画笔颜色设置为白色
    img1.Canvas.Rectangle(cx, cy, X, Y);
    Img1.Canvas.FrameRect(TheRect);
    end;
    end;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵