.net - WinForms 应用程序在 16 位显示屏上使用低质量标题栏图标

标签 .net winforms icons color-depth

在具有 16 位颜色深度的显示器(包括设置为 16 位颜色的远程桌面 session )上,Windows 窗体应用程序使用分配的标题栏图标的低颜色深度版本 (Form.Icon)。但是,WPF 应用程序和 Windows 资源管理器使用 24 位颜色深度(如果存在)。

我第一次在我当前正在开发的 Windows 窗体应用程序中看到这一点。我使用的图标定义了 4 位、24 位和 32 位变体。在 16 位显示器上,Windows 窗体在标题栏中使用丑陋的 4 位版本,而不是美观的 24 位或 32 位版本。

为了测试和说明该行为,我创建了一个测试图标,其中每种尺寸和颜色格式的设计明显不同。我包括 4 位、8 位、24 位和 32 位变体。

以下是 32 位和 16 位显示器上的结果:

在 32 位显示器上,一切正常:

Windows 资源管理器:

Windows Explorer, 32-bit display

WPF 应用程序:

WPF Application, 32-bit display

Windows 窗体应用程序:

Windows Forms Application, 32-bit display

在 16 位显示器上,Windows 窗体显示比 WPF 或 Windows 资源管理器颜色深度更低的图标变体:

Windows 资源管理器:

Windows Explorer, 16-bit display

WPF 应用程序:

WPF Application, 16-bit display

Windows 窗体应用程序:

Windows Forms Application, 16-bit display

在 16 位显示器上,Windows 资源管理器和 WPF 使用 24 位格式,但 Windows 窗体不使用。在本例中,它使用 8 位格式。我真正的应用程序图标没有 8 位变体(但我现在要做一个!),因此 Windows 窗体使用 4 位变体。

如何使我的 Windows 窗体应用程序在 16 位显示器上的标题栏中显示 24 位版本的图标?

最佳答案

不幸的是,您无法在 16 位系统上显示 24 位图像。但是,您可以想出一个技巧,使您的应用程序适应其运行的系统。

所以,你可以尝试伪造图片的“位”字段(尝试使用一些照片编辑软件),使其认为它是 16 位,而实际上是 24 位。这是可能的,几年前我已经成功做到了,但我不记得怎么做了(抱歉)。

我想这就是你应该尝试解决问题的方法。

祝你好运!

关于.net - WinForms 应用程序在 16 位显示屏上使用低质量标题栏图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826990/

相关文章:

c# - 一个好的(最好是免费的).Net 应用程序安装程序?

c# - 为什么使用 String.Format() 设置 Label 的文本对一些 Int32 变量的运行速度比对其他 Int32 变量的运行速度快 20 倍?

c# - 事件队列无法正常工作 winforms

c# - 有没有一种方法可以在 C# 中获取上个月的名称和年份

.net - 组合列表但获得唯一的成员

c# - .net core - 将未知数量的 IProgress<T> 传递给类库

c# - 可以在 RichtextBox 中加快线条的着色速度吗?

macos - MonoMac 恢复应用程序图标更改

visual-studio - 如何仅使用 MSPaint 和 Visual Studio 为 Visual Studio 创建图标

java - 你会如何改变你的程序图标而不是默认的java图标