【问题标题】:Problem with TImage and TScrollBoxTImage 和 TScrollBox 的问题
【发布时间】:2010-06-23 06:29:06
【问题描述】:

我正在使用 delphi。
我有一个滚动框,我在其中放置 TImage 控件。现在我想缩放渲染到 TImage 控件中的图像。所以,我使用的是 TCanvas 的 stretchDraw 方法。我的代码是 -

   if sbZoom.Down then begin
      rct := imgmain.Picture.Bitmap.Canvas.ClipRect;
      rct := Rect(rct.Left * 2,rct.Top * 2,rct.Right * 2,rct.Bottom * 2);
      imgmain.Picture.Bitmap.Canvas.StretchDraw(rct,imgmain.Picture.Bitmap);
      imgmain.Repaint;
   end;

它可以正确缩放图像,我的问题是我希望滚动框的大小也应该随着图像的缩放而改变。
Also explain me parameters of Canvas.StretchDraw method. I am little confused with it.
谢谢。

【问题讨论】:

    标签: delphi timage


    【解决方案1】:

    您无需调用 StretchDraw 即可轻松完成此操作:

      if Zoomed then begin
        Image1.AutoSize := false;
        Image1.Stretch := true;
        Image1.Width := 2*Image1.Width;
        Image1.Height := 2*Image1.Height;
      end
      else begin
        Image1.Stretch := false;
        Image1.AutoSize := true;
      end;
    

    AutoSize := true 确保 TImage 与里面的图片大小相同。在缩放期间,我们关闭 AutoSize 并打开 Stretch,因此图片被调整为 TImage 大小(这里仍然相同)。然后我们将 TImage 的大小加倍来制作缩放效果。由于 TImage 现在变大了,滚动框可以正常工作了。

    【讨论】:

    • 但是不会改变Image1.Picture.Bitmap.Width和Image1.Picture.Bitmap.Height的值...
    • 没有,但是Scrollbox不关心Image1.Picture.BitmapWidth,它只关心Image1.Width。当您可以在不实际破坏信息的情况下显示更大/更小的图像时,为什么要调整实际位图的大小? +1。
    • @Cosmin 我想要相同大小的位图,因为我必须在 mousedown 事件上对图像进行进一步处理并更改图像的几个点。
    【解决方案2】:

    Uwe Raabe 为您提供了正确的方法。这就是您的方式不起作用的原因:滚动框将显示滚动条并帮助您查看整个控件。在您的情况下,它只会在 TImage 对象变得比滚动框大时显示滚动条。 Scrollbox 不可能知道 TImage 的内部结构,所以它不关心 TImage.Picture,它只关心控件。并且具有 AutoSize = False 的 TImage 并不关心它的图片,它的大小始终保持不变。

    您的代码将基本位图重新绘制到自身上。问题是,位图具有固定的宽度和高度:如果您在位图区域之外进行绘制,您基本上会被无声地忽略。当您通过 StretchDrawing 将位图“缩放”到自身上时(我很惊讶它一开始就起作用了!)您并没有使位图变大,并且不适合的东西会被悄悄地剪掉。如果您确实希望内部位图改变大小,那么您首先需要创建一个新的、更大的位图,将放大的图像绘制到新位图,然后将位图分配给您的 TImage。如果这样做,请确保 TImage.AutoSize = True。

    【讨论】:

    • OK 好答案...实际上我已经尝试过了,但它也没有像我预期的那样工作。但问题是我在 strechDraw 函数中传递的参数。我正在使用更大的位图并传递相同的位图作为 StrechDraw 的参数。我的另一个问题是关于 StrechDraw 的参数,没有人解释。反正现在我已经明白了。
    【解决方案3】:

    您应该将图像控件的大小设置为位图的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2012-03-24
      • 2019-01-24
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多