2009-06-23 32 views
5

Tôi muốn nguồn gốc ở chính giữa cửa sổ của tôi.Tạo + y UP, Di chuyển nguồn gốc C# System.Drawing.Graphics

 

______________ 
| ^ | 
|  |  | 
|  o----->| 
|   | 
|____________| 

.NET muốn nằm ở góc trên cùng bên trái.

 

_____________> 
|   | 
|   | 
|   | 
|   | 
V____________| 

Dot net và tôi đang cố gắng để có được cùng ..

Có ai biết làm thế nào để làm điều này trong C# chỉ sử dụng đối tượng đồ họa?

Graphics.TranslateTransform không làm điều đó vì nó rời khỏi các tọa độ lộn ngược. Kết hợp Graphics.ScaleTransform (1, -1) này không thỏa đáng vì điều đó làm cho văn bản xuất hiện lộn ngược.

Trả lời

1

Một giải pháp là sử dụng thuộc tính TranslateTransform. Sau đó, thay vì sử dụng các cấu trúc Point/PointF bạn có thể tạo ra một cấu trúc FlippedPoint/FlippedPointF của riêng bạn mà có phôi ngầm tới điểm/PointF (nhưng bằng cách đúc họ coords bị lật):

public struct FlippedPoint 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 

    public FlippedPoint(int x, int y) : this() 
    { X = x; Y = y; } 

    public static implicit operator Point(FlippedPoint point) 
    { return new Point(-point.X, -point.Y); } 

    public static implicit operator FlippedPoint(Point point) 
    { return new FlippedPoint(-point.X, -point.Y); } 
} 
0

Thử tạo đối tượng đồ họa có chiều cao âm. Tôi không biết thư viện C# cụ thể, nhưng mẹo này hoạt động trong các phiên bản GDI gần đây.

1

Bạn có thể tiếp tục sử dụng ScaleTransform(1, -1) và đặt lại tạm thời chuyển đổi hiện tại trong khi vẽ văn bản của bạn:

// Convert the text alignment point (x, y) to pixel coordinates 
PointF[] pt = new PointF[] { new PointF(x, y) }; 
graphics.TransformPoints(CoordinateSpace.Device, CoordinateSpace.World, pt); 

// Revert transformation to identity while drawing text 
Matrix oldMatrix = graphics.Transform; 
graphics.ResetTransform(); 

// Draw in pixel coordinates 
graphics.DrawString(text, font, brush, pt[0]); 

// Restore old transformation 
graphics.Transform = oldMatrix; 
Các vấn đề liên quan