您好我有以下代码从Timage添加图像,现在从Blob填充。我的问题是这段代码不会将图像添加到绘图框而是添加到表单中。
var
RectangleCanvas, RectanglePicture: TRectF;
BlobStream: TStream;
begin
BlobStream := qrypunchsheetitemphoto.CreateBlobStream(qrypunchsheetitemphoto.FieldByName('Photo'),TBlobStreamMode.bmRead);
imgviewimage.Bitmap.LoadFromStream(BlobStream);
fdrawbox:= TMyPaintBox.Create(panel1);
fdrawbox.Canvas.BeginScene;
fdrawbox.BitmapStamp := imgviewimage.Bitmap;
fdrawbox.Height := imgviewimage.Bitmap.Height;
fdrawbox.Width := imgviewimage.Bitmap.Width;
RectangleCanvas := RectF(10, 10, imgviewimage.Bitmap.Width, imgviewimage.Bitmap.Height);
RectanglePicture := RectF(10, 10, imgviewimage.Bitmap.Width, imgviewimage.Bitmap.Height);
fdrawbox.Canvas.DrawBitmap(imgviewimage.Bitmap, RectangleCanvas , RectanglePicture, 1);
fdrawbox.Canvas.EndScene;
fdrawbox.BringToFront;
BlobStream.Free;
TabControl1.ActiveTab := tabViewImage;
end;
end;
答案 0 :(得分:0)
FMX Paintbox与旧的Delphi Paintbox不同。以前,您可以将Paintbox放在表单的任何位置并开始绘图。结果将在您放置它的Paintbox的范围内。
FMX Paintbox不是那样的,我不理解他们的推理。我被告知它与跨平台兼容性以及设备如何处理画布操作有关。
您可以轻松验证画布宽度。
如果您的表格宽度为640像素,并在中间放置一个50 x 50的Paintbox,您可能希望在中间进行绘图。
亲自检查;
ShowMessage(FloatToStr(Paintbox1.Width)); // Result will be 50
现在检查Paintbox1.Canvas.Width,你会得到不同的结果。
ShowMessage(IntToStr(Paintbox1.Canvas.Width)); // Result is 640
将参数传递给绘图函数时,需要考虑这一点并相应地进行偏移。我已经阅读了一些关于父母剪辑有一些影响的内容,但我没有看到它有效。
另一个可能的解决方案是使用TPanel并在它的画布上绘制。