我想快速调整图像大小(缩小/放大)。生成的图像应该是高质量的,所以我不能使用经典的StretchDraw或类似的东西。JanFX和Graphics32库提供高质量的重采样器。质量很高,但速度非常慢(处理2000x1000图像需要几秒钟)。
我想试试FMX CreateThumbnail看看它有多快:
FMX.Graphics.BMP创建缩略图
我在VCL应用程序中创建了一个FMX位图,并试图为其分配一个"正常"位图。
fmxBMP.Assign(vclBMP);
但我得到一个错误:无法将TBitmap分配给TBitmap。显然,这两个位图是不同的。
我的问题:
1.FMX中的图像处理程序是否比正常的VCL程序快得多
2.最重要的是:如何将VCL位图分配给FMX位图(反之亦然)?
您可以使用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;