2016-06-14 16 views
0

lineというリストから座標を入れて、パネル1でスケーリングし、それらを接続する線をGraphicsPathで描画します。私が得ている問題は、画像が垂直に反転されていることです。これはおそらくpanel1の(0,0)の座標が左上にあり、通常の座標が左下にゼロを持つ座標系から発生しているからです。コードは以下の通りである:グラフィックスはキャンバスを垂直に反転します

Graphics G = e.Graphics; 
GraphicsPath gp = new GraphicsPath(); 
foreach (var line in tockeKoordinate) 
{ 
    gp.AddLine((float)(line.startX), (float)(line.startY), 
       (float)(line.endX), (float)(line.endY)); 
    gp.CloseFigure(); 
} 
var rect = gp.GetBounds(); 
var scale = Math.Min(1f * (int)(panel1.ClientSize.Width)/rect.Width, 
         1f * (int)(panel1.ClientSize.Height)/rect.Height); 

using (Pen pen = new Pen(Color.DarkGreen, 0.0001f)) 
{ 
    G.SmoothingMode = SmoothingMode.AntiAlias; 
    G.Clear(Color.White); 
    G.ScaleTransform(scale, scale); 
    G.TranslateTransform(-rect.X, -rect.Y); 
    G.DrawPath(pen, gp); 
} 

私が検索してきたし、それが何らかの形でG.TranslateTransformラインに行うようになっていますが、私は値にマイナスのプレフィックスを追加するゼロの成功を収めてきた...

+1

あなたは本当にただ、むしろ左上にある(0、0)の通常のグラフィックス規則を使用する必要があります数学的な慣習からそれをやって、後で反転させるより。 – Jashaszun

+2

フリップされたグラフィックスオブジェクトを使用する方法については、[こちら](http://stackoverflow.com/questions/37497929/flip-coordinates-when-drawing-set-of-rectangles/37498798?s=1.5030#37498798)を参照してください。キャンバスのサイズを知る必要があることに注意してください! – TaW

+0

@JashaszunソースGPSの座標はそうであり、それらの多くは手動で残念なことにそれらを変更することはできません。 – Romy

答えて

1

解決済み、TaWとJames Lambertの助けを借りて。 ScaleTransformのYパラメータを否定することで軸を反転するだけでなく、TranslateTransformを使ってキャンバスをダウンさせるために必要な:

G.TranslateTransform(0, +panel1.ClientSize.Height); 
    G.ScaleTransform(scale, -scale); 
2

TranslateTransformは物事を動かすだけですが、何かを反転することはできません。 ScaleTransformのパラメータの1つを無効にすることで反転できます。

+0

それは、画面が空白になりました。 – Romy

関連する問題