Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Класс Font. Как изменить расстояние между буквами и сделать менее жирным текст?

#c_sharp #winforms #шрифты


Как увеличить расстояние между буквами и сделать еще менее жирным текст?

Font font = new Font("Courier New", 10, FontStyle.Regular);
SolidBrush brush = new SolidBrush(Color.Black);
graf.DrawString("Надпись", font, brush, 130, 16);



    


Ответы

Ответ 1



Скорее всего, объект Graphics был получен из класса изображения. Что-то вроде: var img = new Bitmap(...); graf = Graphics.FromImage(img); При этом у него заданы определённые значения свойств, которые приводят к рендерингу текста жирным и на вид слипшимся. Задайте свойство: graf.TextRenderingHint = TextRenderingHint.AntiAlias; Попробуйте разные значения.

Ответ 2



Как увеличить расстояние между буквами Например, используя для рисования текста функции GDI вместо GDI+: using System; using System.Windows.Forms; using System.Drawing; using System.Runtime.InteropServices; namespace WindowsFormsTest1 { public partial class Form1 : Form { [DllImport("gdi32.dll")] public static extern int SetTextCharacterExtra( IntPtr hdc, int nCharExtra ); [DllImport("gdi32.dll")] static extern bool TextOut(IntPtr hdc, int nXStart, int nYStart, string lpString, int cbString); [DllImport("gdi32.dll")] public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); IntPtr hfont; public Form1() { InitializeComponent(); Font font = new Font("Courier New", 10, FontStyle.Regular); hfont = Font.ToHfont(); } private void panel1_Paint(object sender, PaintEventArgs e) { IntPtr hdc = e.Graphics.GetHdc(); try { var res = SetTextCharacterExtra(hdc, 10); //расстояние между символами IntPtr prev_font = SelectObject(hdc, hfont); string str = "Надпись"; TextOut(hdc, 130, 16, str, str.Length); SelectObject(hdc, prev_font); } finally { e.Graphics.ReleaseHdc(hdc); } } } }

Комментариев нет:

Отправить комментарий