Как избавится от артефактов при выводе текста под углом
От: Аноним  
Дата: 22.10.10 06:52
Оценка:
Есть следующий метод:

        /// <summary>
        /// Метод для рисования под углом.
        /// </summary>
        /// <param name="g">graphics на котором рисуем</param>
        /// <param name="s">строка</param>
        /// <param name="from">точка поворота координат</param>
        /// <param name="L">длина отрезка вдоль которого рисовать</param>
        /// <param name="angle">угол поворота</param>
        /// <param name="font">font выводимого текста</param>
        /// <param name="bText">brush выводимого текста</param>
        /// <param name="bBackground">brush фона</param>
        void DrawString(Graphics g, string s, Point from, int L, int angle, Font font, Brush bText, Brush bBackground)
        {
            //определяем размеры текста
            SizeF size = g.MeasureString(s, font);
            //определяем отступы
            int dx = (int)Math.Round((L - size.Width) / 2);
            int dy = -1 * (int)Math.Round(size.Height / 2);
            // Устанавливаем начало координат в точку from.
            g.TranslateTransform(from.X, from.Y);
            // Поворачиваем систему кооординат.
            g.RotateTransform(angle);
            //Рисуем подложку если нужно
            if (bBackground != null)
                g.FillRectangle(bBackground, dx, dy, size.Width, size.Height);
            // Выводим надпись.
            g.DrawString(s, font, bText, dx, dy);
            // Поворачиваем систему кооординат обратно.
            g.RotateTransform(-angle);
            // Устанавливаем начало координат в первоначальную точку.
            g.TranslateTransform(-from.X, -from.Y);
        }


в результатах его работы имеется существенный недостаток, а именно если угол не кратен 90 градусам то выводимый текст рисуется с артефактами (точками вылезающими за границы букв), что недопустимо.

Подскажите как устранить этот недостаток?
Re: Как избавится от артефактов при выводе текста под углом
От: Аноним  
Дата: 22.10.10 08:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите как устранить этот недостаток?


хрен его знает, может установить g.SmoothingMode =.. ?
Re[2]: Как избавится от артефактов при выводе текста под угл
От: Аноним  
Дата: 22.10.10 08:33
Оценка:
не спасает ....
Re: Как избавится от артефактов при выводе текста под углом
От: _FRED_ Черногория
Дата: 22.10.10 08:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в результатах его работы имеется существенный недостаток, а именно если угол не кратен 90 градусам то выводимый текст рисуется с артефактами (точками вылезающими за границы букв), что недопустимо.


Иногда текст и при 90 градусах криво показывается :о(

А>Подскажите как устранить этот недостаток?


Не использовать GDI. Попробуйте http://www.antigrain.com или WPF.
Ну если всё-таки хочется, пожно и побороться.
Help will always be given at Hogwarts to those who ask for it.
Re: Как избавится от артефактов при выводе текста под углом
От: SanyaVB  
Дата: 22.10.10 10:16
Оценка:
Здравствуйте, Аноним, Вы писали:

..............
А>в результатах его работы имеется существенный недостаток, а именно если угол не кратен 90 градусам то выводимый текст рисуется с артефактами (точками вылезающими за границы букв), что недопустимо.

А>Подскажите как устранить этот недостаток?


Если тебе нужно обязательно иметь дело с классом Graphics, то даже не знаю что тебе посоветовать — вот такой он глюкавый. Можешь написать фильтр для размазывания букв — вдруг поможет. А лучше использовать WPF — по идее артефактов не должно быть. А контролы WPF можно использовать в Windows Forms.

PS: Мартин Р. — Чистый код. Это очень полезная книга. Надо всем стремиться так красиво писать с минимальным кол-ом комментариев.
Re: Как избавится от артефактов при выводе текста под углом
От: Аноним  
Дата: 22.10.10 15:09
Оценка:
Все оказалось банально и просто:

e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;


спасибо ветке http://rsdn.ru/forum/dotnet.gui/903340.aspx
Автор: Vladislav_007
Дата: 17.11.04
Re[2]: Как избавится от артефактов при выводе текста под угл
От: Аноним  
Дата: 25.10.10 07:28
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Все оказалось банально и просто:

А><..>
А>спасибо ветке http://rsdn.ru/forum/dotnet.gui/903340.aspx
Автор: Vladislav_007
Дата: 17.11.04


Перевожу: «А вы все — м.даки»
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.