سؤال

وأريد أن أصل إلى أن يكون في مركز نافذتي.

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

و. NET يريد أن يكون في أعلى الزاوية اليسرى.

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

ودوت نت وأنا يحاولون الحصول على طول ..

لا أحد يعرف كيفية القيام بذلك في C # فقط باستخدام الكائن الرسومات؟

وGraphics.TranslateTransform لا يفعل ذلك لأنه يترك الإحداثيات انقلبت رأسا على عقب. الجمع بين هذا Graphics.ScaleTransform (1، -1) ليست مرضية إما لأن ذلك يجعل النص تظهر رأسا على عقب.

هل كانت مفيدة؟

المحلول

وحل واحد سيكون لاستخدام الخاصية TranslateTransform. ثم، بدلا من استخدام البنيات نقطة / PointF يمكنك إنشاء البنيات FlippedPoint / FlippedPointF الخاصة بك التي لديها يلقي ضمنية إلى نقطة / PointF (ولكن قبل الصب لهم الحصول على انقلبت احداثيات):

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

نصائح أخرى

ويمكنك الاستمرار في استخدام ScaleTransform(1, -1) وإعادة التحول الحالي مؤقتا في حين رسم النص الخاص بك:

// 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 # مكتبة على وجه التحديد، ولكن هذه الحيلة يعمل في الإصدارات الأخيرة من GDI.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top