【问题标题】:GDI+ Dithering ProblemGDI+ 抖动问题
【发布时间】:2010-09-27 11:39:47
【问题描述】:

我有一个使用适用于 Windows 的 Win32 API 的 C++ 应用程序,我遇到了 GDI+ 抖动问题,但我不知道为什么会这样。

我有一个自定义控件(自​​定义窗口)。当我收到 WM_PAINT 消息时,我在图形设备上使用 FillPolygon 绘制了一些多边形。此图形设备是使用 BeginPaint 的 HDC 创建的。

但是,当多边形出现在屏幕上时,它们会抖动而不是透明,并且似乎只显示很少的颜色(可能是 256 种?)当我在 C# 中使用 .NET 接口到 GDI+ 中做同样的事情时,它可以工作很好,这让我想知道发生了什么。

我没有做任何特别的事情,据我所知,这是一个应该可以正常工作的简单示例。我做错了吗?

编辑:没关系。它只发生在远程桌面上,即使 C# 示例没有在远程桌面上抖动。远程桌面设置为 32 位颜色,所以我不知道这是怎么回事。

【问题讨论】:

  • 您找到解决方案了吗?每当我使用具有透明度的画笔时,它都会在远程桌面上抖动 - 即使透明的 PNG 等在 RD 上显示良好。

标签: c++ gdi+ gdi


【解决方案1】:

它只发生在远程桌面上

许多远程应用程序会降低颜色深度以降低带宽需求。虽然我没有使用远程桌面,但在某些 VNC 连接上也会发生同样的情况。我会检查你的 RD 服务器和客户端设置。

【讨论】:

  • 远程桌面允许您设置颜色深度,我已将其设置为 32 位。此外,没有其他任何东西被抖动,只有我正在处理的这个应用程序。 C# 版本运行良好。
【解决方案2】:

嗯...填充能力由目标设备决定。在远程桌面上工作时,AFAIK Windows 会替换显示驱动程序,从而可以更改显示的支持功能。

  1. 在 wm_paint 上绘制时,实际上是直接在屏幕表面上绘制,而 .net 通常使用双缓冲(绘制到内存中的位图,然后对整个位图进行 blits)
  2. gdi+ 中有一些设置会影响绘图质量。也许屏幕上、屏幕外和远程绘画有不同的默认值?

【讨论】:

  • @Daniel Jennings 你接受了这个作为解决方案,但这里没有解决方案。正如评论者 Damien 所问:您找到解决方案了吗?您接受的答案并未回答问题,而是提出了更多问题。
  • 我在 VB.NET 中遇到了同样的问题,当我将图形绘制到屏幕外缓冲区(位图)并在绘制事件期间仅绘制位图时,问题就消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2011-09-03
  • 2016-06-15
  • 2010-10-03
相关资源
最近更新 更多