2009-08-12 5 views
1

Notre application dessine des ombres portées sous les vignettes. Il le fait en créant une image bitmap, en obtenant un objet Graphics en utilisant Graphics.FromImage, puis en superposant des images en utilisant Graphics.DrawImage. Je l'utilise aujourd'hui pour la première fois sur le bureau à distance, et il semble horrible, parce que les ombres sont tramées. Je ne sais pas si cela se produit pendant la superposition, ou dans le client RDP. Y at-il un moyen pour moi de déterminer si l'image finale sera tramée, soit en regardant l'image, l'objet graphique, ou les paramètres de l'écran, afin que je puisse omettre l'ombre?Comment détecter si un graphique sera tramé?

Répondre

1

Vous pouvez utiliser la variable System.Windows.Forms.SystemInformation.TerminalServerSession pour détecter si vous êtes en mode RDP et le dégrader en conséquence.

Je ne sais pas un moyen de détecter si le client RDP ne tramage ou si est décalé de la profondeur de couleur du deskto pour le match mais vous pouvez détecter ce dernier via la fonction 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); 
     } 
    } 
} 

rendu sur la base la profondeur de couleur est préférable à la dégradation spéculative en supposant que l'utilisateur le fait à cause de RDP mais peut être suffisant pour vous.

Questions connexes