Delphi Graphics32在ImgView32中调整图层大小

时间:2015-01-17 05:26:02

标签: delphi graphics32

我希望能够通过点击按钮以编程方式调整一个图层(所选图层)的大小。 所以基本上我有一个ImgView32,我添加了图层。最后一个被选中,然后我想按下一个按钮,然后单击该按钮,我希望所选图层被放大......

我希望能够水平和垂直绘制线条,以便允许用户绘制房屋的布局(2D)。但是我希望用户能够在没有鼠标的情况下调整行的大小...所以他应该能够在编辑框中输入宽度和高度,并且单击按钮可以将尺寸应用到相应的(选定的)行。

我怎么能在graphics32中做到这一点?

我试过这样:

var
  orig,Tmp: TBitmap32;
  Transformation: TAffineTransformation;
begin
  Tmp := TBitmap32.Create;
  Orig := TBitmap32.Create;
  Transformation := TAffineTransformation.Create;

  if Selection is TBitmapLayer then
    begin
      orig := TBitmapLayer(Selection).Bitmap;
      try
          Transformation.BeginUpdate;
          Transformation.SrcRect := FloatRect(0, 0, orig.Width+200, orig.Height+200);
          Transformation.Translate(-0.5 * orig.Width, -0.5 * orig.Height);
          tmp.SetSize(200,200);
          Transformation.Translate(0.5 * Tmp.Width, 0.5 * Tmp.Height);
          Transformation.EndUpdate;
          orig.DrawMode := dmTransparent;
          Transform(Tmp, orig, Transformation);
          orig.Assign(Tmp);
          orig.DrawMode := dmTransparent;
      finally
        Transformation.Free;
        Tmp.Free;
      end;

    end;
end;

但是所选图层的大小保持不变,内容缩小了...... 我不知道我做错了什么。 请帮忙。

谢谢

1 个答案:

答案 0 :(得分:1)

类似的东西:

begin
  if Selection is TBitmapLayer then
    begin
      TBitmapLayer(Selection).Location := FloatRect(TBitmapLayer(Selection).Location.Left,
        TBitmapLayer(Selection).Location.Top, TBitmapLayer(Selection).Location.Right + 200, TBitmapLayer(Selection).Location.Bottom + 200);    
    end;
end;

会使图层宽200像素(x维和y维)。这样做,如果没有另外指定,内容将(通常)被拉伸。

使用像IncreaseRect()这样的函数可以更优雅地编写丑陋的赋值,但是它不存在,但必须由你自己编写。

它可能看起来像:

function IncreaseRect(SourceRect: TFloatRect; IncX, IncY: TFloat): TFloatRect;
begin
  Result := FloatRect(SourceRect.Left, SourceRect.Top, 
    SourceRect.Right + IncX, SourceRect.Top + IncY);
end;

并使用

进行调用
TBitmapLayer(Selection).Location := IncreaseRect(TBitmapLayer(Selection).Location, 200, 200);

我仍然不确定这是否是你所追求的。