我们的应用程序在缩略图下绘制阴影。它通过创建位图,使用Graphics
获取Graphics.FromImage
对象,然后使用Graphics.DrawImage
覆盖图像来实现此目的。我今天第一次在远程桌面上使用它,它看起来很糟糕,因为阴影正在抖动。我不知道这是在覆盖期间还是在RDP客户端中发生的。有没有办法通过查看图像,图形对象或屏幕设置来确定最终图像是否会抖动,所以我可以省略阴影?
答案 0 :(得分:1)
您可以使用System.Windows.Forms.SystemInformation.TerminalServerSession变量来检测您是否处于RDP模式并相应地降级。
我不知道如何检测RDP客户端是否进行抖动,或者桌面颜色深度是否与其匹配,但您可以通过GetDeviceCaps函数检测后者:
using System.Runtime.InteropServices;
public class DeviceCaps
{
private const int PLANES = 14;
private const int BITSPIXEL = 12;
[DllImport("gdi32", CharSet = CharSet.Ansi,
SetLastError = true, ExactSpelling = true)]
private static extern int GetDeviceCaps(int hdc, int nIndex);
[DllImport("user32", CharSet = CharSet.Ansi,
SetLastError = true, ExactSpelling = true)]
private static extern int GetDC(int hWnd);
[DllImport("user32", CharSet = CharSet.Ansi,
SetLastError = true, ExactSpelling = true)]
private static extern int ReleaseDC(int hWnd, int hdc);
public short ColorDepth()
{
int dc = 0;
try
{
dc = GetDC(0);
var nPlanes = GetDeviceCaps(dc, PLANES);
var bitsPerPixel = GetDeviceCaps(dc, BITSPIXEL);
return nPlanes * bitsPerPixel;
}
finally
{
if (dc != 0)
ReleaseDC(0, dc);
}
}
}
基于颜色深度的渲染优于通过假设用户因RDP而进行推测性降级,但对您来说可能就足够了。