Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование текста на Graphics 
V
    Опции темы
mr.Anderson
Дата 19.12.2009, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



Казалось бы, все просто. Пытаюсь нарисовать текст на графиксе и вывести на форму. Код рисования текста такой:
Код

public class Text
{
    ...

    public Bitmap GetBitmap()
    {
        Font font = new Font("Courier New", 9, FontStyle.Regular);
        Bitmap text = new Bitmap((int) font.Size * _text.Length, 25);
        Graphics gp = Graphics.FromImage(text);
        gp.DrawString(_text, font, Brushes.Black, 0, text.Height / 2 - font.Size);
        return text;
    }
}

Ну и, соответственно, вывод на форму:
Код

Graphics gp = pbox.CreateGraphics();
gp.DrawImage(new Text("12345").GetBitmap(), 0, 0);

В результате получаю вот это:
user posted image
Я знаю, что я рисую текст как-то неправильно. Задача такова: создать прямоугольный битмап размером четко таким, чтобы туда вписался текст заданного размера и шрифта, а также, разумеется, заданного содержания. Я не могу понять, как просчитать размер битмапа. То, как он просчитывается сейчас - это топорно, грубо и вообще ни в какие рамки не лезет (чего стоит одно упоминание высоты 25, необязательно она такая, может быть и другой). Плюс, как видно на картинке, цифры почему-то как будто объедены по бокам, неровные и некрасивые. Почему так? Мне нужен нормальный четкий текст.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
NightmareZ
Дата 19.12.2009, 04:27 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Код

public Bitmap GetBitmap(Graphics gfx)
{
    using (Font font = new Font("Courier New", 9, FontStyle.Regular))
    {
        SizeF bitmapSize = gfx.MeasureString(_text, font);
        Bitmap text = new Bitmap((int)bitmapSize.Width, (int)bitmapSize.Height);
        using (Graphics gp = Graphics.FromImage(text))
            gp.DrawString(_text, font, Brushes.Black, 0, 0);
        return text;
    }
}


Код

using (Graphics gp = CreateGraphics())
    gp.DrawImage(new Text("12345").GetBitmap(gp), 0, 0);


А текст калечно выводится, потому что на прозрачном битмапе рисуешь.
Если его предварительно залить каким-нить непрозрачным цветом
Код

public Bitmap GetBitmap(Graphics gfx)
{
    using (Font font = new Font("Courier New", 9, FontStyle.Regular))
    {
        SizeF bitmapSize = gfx.MeasureString(_text, font);
        Bitmap text = new Bitmap((int)bitmapSize.Width, (int)bitmapSize.Height);
        using (Graphics gp = Graphics.FromImage(text))
        {
            gp.Clear(SystemColors.Control);
            gp.DrawString(_text, font, Brushes.Black, 0, 0);
        }
        return text;
    }
}

то получишь вполне нормальный текст
user posted image

Это фича от Microsoft  smile 

Это сообщение отредактировал(а) NightmareZ - 19.12.2009, 04:41


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
mr.Anderson
Дата 19.12.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



Большое человеческое спасибо)


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.