因此,通过我的例程,我为在TImage中显示的TBitmap( ABitmap )计算了新的宽度/高度。
这是调整大小并绘制 ABitmap 的代码
var
TmpScale: Double;
TmpNH: Single;
TmpNW: Single;
P: string;
begin
P := FAppDataDirPath + 'Library' + PathDelim + 'assets' + PathDelim + 'app_header.png';
if FileExists(P) then
begin
ImageLogo.Bitmap := TBitmap.Create(1,1);
ImageLogo.Bitmap.LoadFromFile(P);
TmpScale := ImageLogo.Width / ImageLogo.Bitmap.Width;
TmpNW := ImageLogo.Bitmap.Width * TmpScale;
TmpNH := ImageLogo.Bitmap.Height * TmpScale;
FBitmapBuffer.Width := Round(TmpNW);
FBitmapBuffer.Height := Round(TmpNH);
FBitmapBuffer.Canvas.DrawBitmap(ImageLogo.Bitmap, RectF(0,0,ImageLogo.Bitmap.Width,ImageLogo.Bitmap.Height), RectF(0,0,TmpNW,TmpNH), 255);
ImageLogo.Bitmap.Assign(FBitmapBuffer);
我得到的是一个完全空白的区域,其中显示了TImage。
最佳答案
看一看TCanvas.BeginScene(..)
:在画布上绘画之前,您必须开始场景,并在以后结束它:
if yourCanvas.BeginScene() then
try
yourCanvas.DrawBitmap(..);
finally
yourCanvas.EndScene();
end;
就是这样:您只是缺少对BeginScene()
和EndScene()
的调用。但除此之外,我有几点建议:意见建议
TBitmap.CreateFromFile(const AFileName: string)
即可。TBitmap
对象。您应该插入像if not Assigned(FBitmapBuffer) then FBitmapBuffer := TBitmap.Create(..);
这样的支票Round(TmpNW)
吗?我想您应该输入Trunc(TmpNW)
代替。FBitmapBuffer
对象加载图像?TImage
上了,但老实说,我不知道您最初打算做什么。在保持宽高比的同时将位图粘贴到图像上吗? TiImage
具有WrapMode
属性,可让您设置图像的缩放比例。