【问题标题】:Changing Graphics32's TImgView32's resampler kernel on the fly即时更改 Graphics32 的 TImgView32 的重采样内核
【发布时间】:2019-08-09 09:32:20
【问题描述】:

我想即时更改 Graphics32 的 TImgView32 的重采样内核。 但是没有明显的区别。代码如下:

procedure TForm1.FormCreate(Sender: TObject);
begin
  ImgView321.Bitmap.LoadFromFile('1.bmp');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ImgView321.Scale := ImgView321.Scale*2;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ImgView321.Scale := ImgView321.Scale/2;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ImgView321.Bitmap.ResamplerClassName := 'TKernelResampler'; 
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ImgView321.Bitmap.ResamplerClassName := 'TNearestResampler'
end;

【问题讨论】:

  • 那么问题出在哪里? (顺便说一句:应该可以为 up 和 down 使用相同的事件处理程序)。
  • 我把代码改得更简单了。我看不到图像的显示方式有任何变化

标签: delphi resampling graphics32


【解决方案1】:

当您选择“TKernelResampler”时,指定使用的内核很重要。默认值为 TBoxKernel,其结果与 'TnearestResampler' 几乎相同

实际上从视觉上看是一样的,只是计算方式不同。

尝试使用“TCubicKernel”或“TLanczosKernel”。要获得更多控制,您还可以选择“THermiteKernel”或“TAlbrechtKernel”,它有两个控制参数(而不仅仅是一个)。

【讨论】:

  • 我尝试了您的解决方案,但它仍然与 TnearestResampler 完全相同。此外,我在设计时的选项中没有 TLanczosKernel:i.imgur.com/lJ45WYz.png
  • 你必须使用 TkernelResampler。有了这个,您可以将内核(而不是重采样器)更改为 TLanczosKernel。 [假设您使用的是最新的 GR32 v2.0)
猜你喜欢
  • 2020-02-06
  • 2015-10-10
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2018-08-25
相关资源
最近更新 更多