2017-01-02 4 views
0

まずはC#で初めてのことですが、私は常にJavaを使いました。まず、私は「あなたは二重のCOORDSを持つことができますか?」聞きしたかったWindowsで描画するためのC#倍精度座標フォーム

は、私が意味する、「あなたは画面に描画ピクセルより深く行くことができますか?」、

も、「窓が最高の形ですシンプルなグラフィックアプリケーションを作成する方法(単純な落書きジャンプゲームのような)?

しかし、それは単純な好奇心です。問題は、私はいくつかの単純なオブジェクト(点、行、特に長方形)をdouble/float/decimalの精度(それは重要ではない、整数よりも精度が高い)で描画する必要があるということです。 Visual Studio)、しかし私は何も見つけることができません。

私はPointfやRectangleFのように見えましたが、そのために使用されているかどうかはわかりません。 Rect(System.Windows.Shapes)は倍精度を使用していますが、Windowsフォームでは使用できません。(わかりませんが、可能であれば、Windowsフォームでこの作業を行う最も簡単な方法を探したいと思います)。

私が十分に明確にしていることを願って、事前に感謝します。

+0

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

+0

:ここ

SmoothingMode.HighQualityを用いた補間とズームインされた結果であり、 winformsよりも。 –

+1

ほとんどのGDI +メソッドには、座標に対して「単精度」の精度オーバーロードがあります。しかしながら、ピクセル位置は丸められているが、もし「平滑化モード」が例えば'HighQuality。あなたの質問をより明確に語ってください。私はあなたが何を達成したいのか分かりません。 – Jens

答えて

1

私のコメントに記載されているように、おそらくそれはあなたが必要とするものでもあります。

Graphics.DrawLine()などの描画メソッドは、individual floatsまたはPointF, RectangleF structuresという形式の単精度座標でオーバーロードを受け取ります。

ただし結果はSmoothingModeによって異なる場合があります。

例えば:

ここ
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); 
    } 
} 

、ラインは、実際には二つの座標間の強度の補間されます。 SmoothingModeをデフォルトのままにすると、その線は正確に1ピクセル幅になり、最も近いピクセルに丸められます。グラフィックスに最も適した方法をテストして選択する必要があります。あなたはゲームではなく団結して行くようにしたい場合は

enter image description here