【问题标题】:How to make TImage high-DPI aware using Delphi 10.3.3?如何使用 Delphi 10.3.3 使 TImage 具有高 DPI 意识?
【发布时间】:2021-10-13 01:46:45
【问题描述】:

我正在使用 TImage 组件来显示图像文件。但是,在高 DPI 显示器中显示时,图片看起来很模糊。如果我使用高分辨率图像,它们在普通显示器中会被拉伸并且看起来很糟糕。

我知道 Delphi 10.4 有内置的 TVirtualImage 组件。我正在寻找 Delphi 10.3.3 VCL 应用程序的解决方法。

【问题讨论】:

  • 您的意思是 VCL 在缩小(高分辨率)图像方面做得很差?
  • 是的,太可怕了。

标签: delphi delphi-10.3-rio


【解决方案1】:
  • 将不同分辨率的图片文件放入TImageCollection

  • 在表单中添加TVirtualImageList 并根据需要设置其WidthHeight

  • 将该图像添加到TVirtualImageList

  • 在表单中添加一个方法UpdateImage,内容如下:

    Image1.Picture.Bitmap := nil;
    VirtualImageList1.GetBitmap(0, Image1.Picture.Bitmap);
    
  • OnCreateOnAfterMonitorDpiChanged 处理程序的形式调用 UpdateImage

【讨论】:

  • 所以这基本上需要OP使用Photoshop(比如说)来创建原始图像的不同版本。如果 OP 只需要提供一个在运行时缩小比例的高分辨率版本会更方便。
  • 不,TVirtualImageList 在内部进行缩放。只是自动缩放像素图像并不总是能给出最好的结果。菲当缩小到 16 像素时,高度详细的 256 像素图像很可能看起来很差。这就是为什么您应该在图像集合中提供不同的分辨率,但您不必提供任何时候可能需要的所有分辨率。
  • 当然,您可以只提供一张高分辨率图像,并通过上述方法将其缩小。如果这能满足您的需求,那很好。
  • @UweRaabe 谢谢,它有效!然而透明PNG图像的背景是白色的。图像的透明属性为 True。有什么想法吗?
  • 不幸的是,没有。您可以直接获取存储在集合中的 PNG 图像(当然,如果它们实际上是 PNG),但这会移除自动缩放机制,并且您会受到可用图像大小的限制。
猜你喜欢
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2023-03-24
  • 2018-08-26
  • 2013-05-23
  • 2012-04-28
  • 2011-06-29
相关资源
最近更新 更多