我希望能够通过点击按钮以编程方式调整一个图层(所选图层)的大小。 所以基本上我有一个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;
但是所选图层的大小保持不变,内容缩小了...... 我不知道我做错了什么。 请帮忙。
谢谢
答案 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);
我仍然不确定这是否是你所追求的。