Delphi 快速调整图像大小的方法(混合FMX和VCL代码)

Delphi 快速调整图像大小的方法(混合FMX和VCL代码),delphi,Delphi,我想快速调整图像大小(缩小/放大)。结果图像应该是高质量的,所以我不能使用经典的StretchDraw或类似的东西。JanFX和Graphics32库提供高质量的重采样器。质量很高,但速度非常慢(处理2000x1000图像需要几秒钟) 我想试试FMX CreateThumbnail,看看它有多快: FMX.Graphics.BMP.create缩略图 我在VCL应用程序中创建了一个FMX位图,并尝试为其分配一个“普通”位图 fmxBMP.Assign(vclBMP) 但我得到一个错误:无法将TB

我想快速调整图像大小(缩小/放大)。结果图像应该是高质量的,所以我不能使用经典的StretchDraw或类似的东西。JanFX和Graphics32库提供高质量的重采样器。质量很高,但速度非常慢(处理2000x1000图像需要几秒钟)

我想试试FMX CreateThumbnail,看看它有多快:

FMX.Graphics.BMP.create缩略图

我在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;

高质量的尺寸调整是昂贵的。很难相信FMX会有所帮助。WIC也很有能力。为什么要投否决票?这个问题提供了所有必要的信息,谁知道呢?如果下行投票者不确定自己的身份,那么你永远也不会知道。这对于StackOverflow来说是很典型的。@DavidHeffernan大多数游戏都在实时地对多个(数百个)图像进行高质量的大小调整。但是,是的。。。我知道。。。这是在硬件中完成的:)非常感谢。我现在正在做一些不同的事情,但我明天肯定会尝试,让你知道它与JanFX(迄今为止我发现的最好的东西)相比如何!