delphi - 调整图像大小会使鼠标 X/Y 变形

标签 delphi drawing scale

我有一个 VCL 表单,其中有一个 TImage ,并为所有边设置了 anchor ,因此当用户调整表单大小时,图像大小与新大小相匹配(几乎要填充,有一些按钮)。

但是,当我调整大小时,用于图像 Canvas 的绘图工具会发生倾斜。在调整大小之前,绘图工作正常,然后,我似乎在鼠标单击的其他位置绘图。

如何调整 TImage 的大小并引用新图像的 X/Y 以便正确显示绘图?

鼠标按下:

Drawing := true;

StartX := x;
StartY := y;

EndX := x;
EndY := y;

鼠标移动:

if Drawing then begin

   Image1.Canvas.Pen.Mode := pmNotXor;

   Image1.Canvas.MoveTo(StartX,StartY);
   Image1.Canvas.LineTo(EndX,EndY);
   Image1.Canvas.MoveTo(StartX,StartY);
   Image1.Canvas.LineTo(x,y);

end;

EndX := x;
EndY := y;

Image1.Canvas.Pen.Mode := pmCopy;

鼠标向上:

Image1.Canvas.MoveTo(StartX,StartY);
Image1.Canvas.LineTo(x,y);
Drawing := false;

最佳答案

我猜图像的 Strech 属性设置为 true。在这种情况下,从图像创建的位图将保持其以前的大小。

当您第一次访问 Image1.Canvas 时,会创建一个大小与 Image1 相同的 TBitmap。调整 image1 大小时,不会调整该位图大小。 Strech = true 将位图渲染为当前图像大小,但位图本身是以前的大小。

只要调整 Image1 的大小,您就可以通过调整 Image1.Picture.Bitmap 来解决此问题。由于 TImage 没有 OnResize,您可以使用 TPanel 作为容器并在其 OnResize 事件中进行调整。

关于delphi - 调整图像大小会使鼠标 X/Y 变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702214/

相关文章:

delphi - 如何使用 rtti 列出属性的属性?

ios - 使用 Apple Pencil 平滑绘图 - 一些不按顺序的点

ios - Iphone 如何使上下文背景透明?

css - 变换:scale to fullscreen?

delphi - 如何调用给定实例的构造函数?

delphi - 是否可以修改已加载的资源?

opencv - 无法绘制最大轮廓

swift - 如何缩放以在所有设备中保持相同的距离?

javascript - 像图像一样缩放 div

delphi - Indy - 了解调制解调器何时发送了 RESET [RST] 标志