مركزية النص في رسومات C#: دليل خطوة بخطوة

عند تطوير التطبيقات في C#، يواجه المطورون تحديًا شائعًا في عرض النص بدقة على الشاشة. إذا كنت تعمل مع .NET Compact Framework (نظام ويندوز موبايل) وفئة Graphics، فقد تواجه مشاكل في تحديد المواقع عند استخدام طريقة DrawString(). وبالتحديد، فإن توسيط النص أفقيًا وعموديًا قد يكون صعبًا، خاصةً عند زيادة أحجام الخط.

في هذا المقال، سنغوص في حل عملي لضمان رسم شخصياتك في مركز الأبعاد المعطاة. دعنا نستكشف كيفية تحقيق ذلك بفعالية.

فهم المشكلة

عادةً، عند استخدامك لطريقة DrawString()، تحدد الإحداثيات التي ستبدأ عندها برسم السلسلة. ومع ذلك، اعتمادًا على حجم الخط وخصائصه، غالبًا لا يظهر النص في المنتصف كما هو متوقع. على سبيل المثال، قد تلاحظ:

  • يظهر النص في وضعية منخفضة أو غير متوازنة عموديًا.
  • أحجام النص الأكبر لها انحرافات أكثر وضوحًا.

لتوضيح ذلك، إذا حاولت رسم حرف مفرد باستخدام حجم نص 12، قد تواجه انحرافًا بنحو 4 بكسل، والذي يزداد إلى 10 بكسل عند حجم 32.

يمكن أن تتسبب هذه المشكلة في تعطيل التصميم العام وسهولة استخدام تطبيقك.

الحل: توسيط النص

لتوسيع النص الذي تم رسمه باستخدام Graphics.DrawString(), نحتاج إلى حساب حجم النص وضبط إحداثياته وفقًا لذلك. إليك تفصيل للقيام بذلك:

الخطوة 1: حساب أحجام الأبعاد

للبداية، سترغب في الحصول على عرض وارتفاع المستطيل العميل حيث سيتم رسم النص. ستحدد هذه الأبعاد مكان وضع النص.

float width = this.ClientRectangle.Width;
float height = this.ClientRectangle.Height;

الخطوة 2: تحديد حجم الخط

بعد ذلك، قم بتعيين الخط استنادًا إلى ارتفاع منطقة الرسم. هذا يضمن أن يكون حجم النص متناسبًا مع المساحة المتاحة.

float emSize = height; // تعيين حجم الخط بناءً على ارتفاع المستطيل العميل

الخطوة 3: قياس حجم النص

باستخدام طريقة Graphics.MeasureString، يمكننا اكتشاف الأبعاد الفعلية التي يحتلها النص.

SizeF size = g.MeasureString(letter.ToString(), font);

الخطوة 4: توسيط النص أفقيًا

لتوسيع النص أفقيًا، نقوم بحساب الإحداثيات السينية عن طريق طرح نصف عرض السلسلة المرسومة من نصف عرض المنطقة:

float x = (width - size.Width) / 2; // حساب التوسيع

الخطوة 5: رسم النص

أخيرًا، ارسم السلسلة باستخدام الإحداثيات المحسوبة. لتحقيق وضع متوازن عموديًا، يمكنك البدء من الحافة العلوية وضبط إذا لزم الأمر.

g.DrawString(letter, font, new SolidBrush(Color.Black), x, 0);

الخطوة 6: إيجاد أفضل حجم خط (اختياري)

إذا كنت تخطط لتغيير حجم النص ديناميكيًا أو تحتاج إلى ضبط لأحجام النص المتنوعة، أنشئ طريقة مساعدة للعثور على أفضل حجم خط مناسب:

private Font FindBestFitFont(Graphics g, String text, Font font, Size proposedSize)
{
    // استمر في تقليل حجم الخط إذا لم يتناسب
    while (true)
    {
        SizeF size = g.MeasureString(text, font);
        // ارجع الخط عندما يتناسب
        if (size.Height <= proposedSize.Height && size.Width <= proposedSize.Width) { return font; }

        // قلل حجم الخط بنسبة 10%
        Font oldFont = font;
        font = new Font(font.Name, (float)(font.Size * .9), font.Style);
        oldFont.Dispose();
    }
}

نصيحة أداء

من الأفضل استدعاء طريقة FindBestFitFont() خلال حدث OnResize()، حيث أن هذه الطريقة تحتاج فقط إلى التنفيذ عندما تتغير أبعاد التحكم بدلاً من كل عرض نص.

// تنفيذ حدث OnResize
protected override void OnResize(EventArgs e)
{
    base.OnResize(e);
    // منطق لتحديث الخط
}

الخاتمة

باستخدام هذه الخطوات، يجب أن تتمكن من عرض النص بدقة داخل تطبيقات C# الخاصة بك باستخدام طريقة DrawString() من فئة Graphics. لديك الآن فهم قوي لكيفية معالجة المشاكل الشائعة مع توسيط النص، مما يسمح لعرض التطبيق الخاص بك أن يبقى جذابًا ووظيفيًا.

من خلال اتباع هذا الدليل، ستعزز مهاراتك في عرض الرسومات وتضمن عرض النص كما هو مقصود. برمجة سعيدة!