我正在研究graphics32。我正在使用其示例中的给定组件 TRotLayer。基于示例(Examples/Layers/RotLayer_Ex),创建的RotLayer仅与ImgView一起缩放。如果未分配 ImgView.Bitmap,则 RotLayer 不会缩放。所以我修改了源代码,改变了它的行为。我更改了 TRotLayer.AdjustTransformation 程序。这就是我所做的。
procedure TRotLayer.AdjustTransformation;
var
ScaleX, ScaleY,
ShiftX, ShiftY: Single;
begin
Transformation.Clear;
Transformation.Translate(-BitmapCenter.X, -BitmapCenter.Y);
Transformation.Rotate(0, 0, Angle);
Transformation.Translate(Position.X, Position.Y);
Transformation.Scale(Scale.X, Scale.Y);
Transformation.Translate(Shift.X, Shift.Y);
// if Scaled and Assigned(LayerCollection) then
// with LayerCollection do
// begin
// GetViewportScale(ScaleX, ScaleY);
// GetViewportShift(ShiftX, ShiftY);
// Transformation.Scale(ScaleX, ScaleY);
// Transformation.Translate(ShiftX, ShiftY);
// end;
end;
我只是省略了限制并简单地执行了 .Scale 过程。我传递了 Scale.X 和 Scale.Y 的值,它按我的预期工作。图像已调整大小,但现在我的问题是定位。如果我缩放它的高度,图像会向上或向下移动,如果我缩放它的宽度,它会向右或向左移动。我只是想让它调整大小并保持在原来的位置。我注意到函数 .Translate 可能会解决我的问题,但我不知道在参数中传递什么。或者我不知道如何计算要传递的值。
任何人都可以帮助我解决这个问题。谢谢。