【问题标题】:Resize image distorts mouse X/Y调整图像大小扭曲鼠标 X/Y
【发布时间】:2013-05-22 21:52:45
【问题描述】:

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

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

如何调整 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;

【问题讨论】:

    标签: delphi drawing scale


    【解决方案1】:

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

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

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

    【讨论】:

    • 我可以在 ReSize 事件中调用什么? Image1.Picture.Bitmap.Height := Image1.Height;Image1.Picture.Bitmap.Width := Image1.Width;?
    • Image1.Picture.Bitmap.SetSize(Image1.Width, Image1.Height);
    • 谢谢,我发现两者都可以工作(设置高度和宽度或 SetSize),有趣的是,如果你把它调整小,然后再大,就会删除图纸。但这是我一直在寻找的。​​span>
    【解决方案2】:

    不要将图像的画布用于绘图目的,而是使用 TPaintBox;将图形存储在私有变量中并使用 PaintBox.Canvas.StretchDraw 在 OnPaint 中绘制。

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 2020-01-04
      • 2015-04-18
      • 2019-11-11
      相关资源
      最近更新 更多