下午好。
我正在开发一个绘图程序,允许用户在画布上拖放带有位图的TImage。(在RAD Studio XE2中的Firemonkey HD应用程序中)然后用户可以在保存图像之前更改x和y比例尺和旋转角度。所有的TImage都保存在列表中,然后使用这个简单的方法将此列表写入底层画布:
for i := 0 to DroppedList.Count - 1 do
begin
AImage := DroppedList[i];
SourceRect.Left := 0;
SourceRect.Right := AImage.Bitmap.Width;
SourceRect.Top := 0;
Sourcerect.Bottom := AImage.Bitmap.Height;
TargetRect.Left := AImage.Position.X;
TargetRect.Right := AImage.Position.X + AImage.Bitmap.Width;
TargetRect.Top := AImage.Position.Y;
TargetRect.Bottom := AImage.Position.Y + AImage.Bitmap.Height;
with FImage.Bitmap do
begin
Canvas.BeginScene;
Canvas.DrawBitmap(AImage.Bitmap, SourceRect, TargetRect, 1, True);
Canvas.EndScene;
BitmapChanged
end;
end;
FImage.Bitmap.SaveToFile('test.bmp');
这个问题在于DrawBitmap不能考虑窗口中可见的图像的缩放和旋转变换,在保存时会丢失。我正在寻找一种在将位图绘制到背景之前应用变换的方法。我无法找到任何关于此的信息,所以希望这里有人能够帮助。谢谢,Daniël。