我想快速调整图像大小(缩小/放大)。结果图像应该是高质量的,所以我不能使用经典的StretchDraw或类似的东西。 JanFX和Graphics32库提供高质量的重采样器。质量很高,但它们非常慢(处理2000x1000图像的秒数)。
我想尝试使用FMX CreateThumbnail来查看它的速度:
FMX.Graphics.BMP.CreateThumbnail
我在VCL应用程序中创建了一个FMX位图,并尝试为其分配一个“普通”位图。
fmxBMP.Assign(vclBMP);
但是我收到错误:无法将TBitmap分配给TBitmap。显然这两个位图是不同的。
我的问题:
1. FMX中的图像处理程序是否比普通的VCL程序快得多?
2.最重要的是:如何将VCL位图分配给FMX位图(反之亦然)?
答案 0 :(得分:2)
您可以使用GDI +缩放。
您可以更改结果质量和速度,指定GDIPAPI
中定义的不同插值,像素偏移和平滑模式。
uses
GDIPAPI,
GDIPOBJ;
procedure ScaleBitmap(Source, Dest: TBitmap; OutWidth, OutHeight: integer);
var
src, dst: TGPBitmap;
g: TGPGraphics;
h: HBITMAP;
begin
src := TGPBitmap.Create(Source.Handle, 0);
try
dst := TGPBitmap.Create(OutWidth, OutHeight);
try
g := TGPGraphics.Create(dst);
try
g.SetInterpolationMode(InterpolationModeHighQuality);
g.SetPixelOffsetMode(PixelOffsetModeHighQuality);
g.SetSmoothingMode(SmoothingModeHighQuality);
g.DrawImage(src, 0, 0, dst.GetWidth, dst.GetHeight);
finally
g.Free;
end;
dst.GetHBITMAP(0, h);
Dest.Handle := h;
finally
dst.Free;
end;
finally
src.Free;
end;
end;