GDI+ 抖动问题

4
我有一个使用Win32 API的C++应用程序,并且在GDI+抖动方面出现了问题,我不知道为什么会出现这种情况。
我有一个自定义控件(自定义窗口)。当我收到WM_PAINT消息时,我使用Graphics设备上的FillPolygon绘制一些多边形。该Graphics设备是使用BeginPaint中的HDC创建的。
然而,当多边形显示在屏幕上时,它们被抖动而不是透明的,并且似乎只显示少量颜色(可能256种?)当我在C#中使用.NET接口进入GDI+时,它可以正常工作,这让我想知道出了什么问题。
我没有做任何特别的事情,这是一个应该正常工作的简单示例,据我所知。我做错了什么吗?
编辑:算了。它只在远程桌面上出现,即使C#示例在远程桌面上也不会抖动。远程桌面设置为32位颜色,所以我不知道发生了什么。

你找到解决办法了吗?无论我使用多透明度的画笔,在远程桌面上都会出现抖动,即使透明PNG等在RD上显示正常。 - Damien
2个回答

0

这只会在远程桌面上发生。

许多远程应用程序为了减少带宽要求而降低颜色深度。虽然我没有使用过远程桌面,但在某些VNC连接上也会发生同样的情况。我建议您检查一下您的RD服务器和客户端设置。


远程桌面允许您设置颜色深度,我已将其设置为32位。此外,除了我正在使用的应用程序之外,没有其他东西被抖动。C#版本运行良好。 - Daniel Jennings

0

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

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

@Daniel Jennings,您接受了此解决方案,但这里并没有解决方案。正如评论者Damien所问:您是否找到了解决方案?您接受了一个不回答问题,而是提出更多问题的答案。 - Ian Boyd
我在VB.NET中遇到了同样的问题,当我将图形绘制到离屏缓冲区(位图)并在绘制事件期间仅绘制位图时,问题消失了。 - BlueMonkMN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接