2016-06-14 3 views
0

Я кладу координаты из списка с именем line, масштабируя их с помощью панели 1 и рисуя линии, которые соединяют их, используя GraphicsPath. Проблема, которую я получаю, заключается в том, что изображение перевернуто по вертикали, вероятно, из-за того, что корневые панели 1 панелинаходятся в левом верхнем углу, в отличие от моих нормальных координат, исходящих из системы координат, которая имеет нули в левом нижнем углу. Код выглядит следующим образом:Графика перевернуть холст вертикально

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|0.5230#37498798) как использовать перевернутый графический объект. Обратите внимание, что вам нужно знать размер вашего холста! – TaW

+0

@Jashaszun исходные координаты GPS такие, и многие из них поэтому не могут вручную их изменить вручную. – Romy

ответ

1

Решено, с помощью TaW и Джеймса Ламберта. Необходимо, чтобы перевернуть ось, отрицая параметры Y на ScaleTransform, но и принести холст вниз, используя TranslateTransform:

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

TranslateTransform просто перемещает вещи, но ничего не может перевернуть. Вы можете перевернуть его, отклонив один из параметров в ScaleTransform.

+0

Пробовал, что экран просто гаснет. – Romy

Смежные вопросы