2017-01-02 1 views
0

tout d'abord je suis nouveau avec C#, j'ai toujours utilisé Java. Tout d'abord,C# double précision des coordonnées pour dessiner dans Windows Form

Je voulais demander « Pouvez-vous avoir à double coords? », Je veux dire « Pouvez-vous aller plus loin qu'un pixel lorsque vous dessinez à l'écran? »,

et aussi « , est-fenêtres forment le meilleur façon de faire une application graphique simple (comme un simple jeu de saut de doodle)? "

mais c'est une simple curiosité. Le problème est que j'ai besoin de dessiner des objets simples (points, lignes, en particulier des rectangles) avec une précision double/float/decimal (cela n'a pas d'importance, avec plus de précision qu'un entier) sur un formulaire Windows (j'utilise Visual Studio), mais je ne trouve rien.

Je l'ai vu comme PointF ou RectangleF etc., mais je ne sais pas si elles sont utilisées à cet effet. J'ai également vu que Rect (System.Windows.Shapes) utilise une double précision mais n'est pas utilisable sous Windows (je ne suis pas sûr, mais si possible, je voudrais trouver la manière la plus simple de faire cette chose sous Windows)). En espérant que j'ai été assez clair, merci d'avance.

+0

http://stackoverflow.com/help/how-to-ask –

+0

si vous voulez faire jeu aller avec l'unité plutôt que winforms. –

+1

La plupart des méthodes GDI + ont des surcharges de précision «simples» pour les coordonnées. Les positions des pixels sont toutefois arrondies si "SmoothingMode" n'est pas défini par ex. 'HighQuality. S'il vous plaît, formulez votre question plus clairement. Je ne sais pas ce que tu veux accomplir. – Jens

Répondre

1

Comme indiqué dans mon commentaire, c'est peut-être même ce dont vous avez besoin. Les autres méthodes de dessin prennent des surcharges avec des coordonnées de simple précision, soit sous la forme individual floats ou PointF, RectangleF structures.

Les résultats peuvent varier en fonction de la SmoothingMode cependant.

par exemple .:

using (var bmp = new Bitmap(100, 100)) 
{ 
    using (var g = Graphics.FromImage(bmp)) 
    { 
     //Note that this enabled anti-aliasing 
     g.SmoothingMode = SmoothingMode.HighQuality; 

     g.Clear(Color.White); 
     float x = 20.0f; 
     float y1 = 1.0f; 
     float y2 = 10.0f; 
     g.DrawLine(Pens.Red, x, y1, x, y2); 
     x = 20.5f; 
     y1 = 11.0f; 
     y2 = 20.0f; 
     g.DrawLine(Pens.Red, x, y1, x, y2); 
     x = 21.0f; 
     y1 = 21.0f; 
     y2 = 30.0f; 
     g.DrawLine(Pens.Red, x, y1, x, y2); 
    } 
} 

Ici, la ligne est en fait interpolées d'intensité entre les deux coordonnées. Si SmoothingMode est laissé par défaut, la ligne aura exactement 1 pixel de large et sera arrondie au pixel le plus proche. Vous devriez tester et choisir la méthode qui convient le mieux à votre graphique.

Voici le résultat zoomée avec interpolation à l'aide SmoothingMode.HighQuality:

enter image description here