Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 3
Регистрация: 21.07.2012
Сообщений: 136

Рисование текста на bitmap

17.05.2018, 02:05. Показов 1538. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, вопрос вот в чем:
есть прямоугольник размеров 100х100 рх нужно от нижнего края отступить 10рх и написать текст размером 12рх и 30рх. но когда рисую отступ разный. в чем причина?
Начал разбираться, отступил сверху 10 рх и таже проблема растояние разное.
рисую через drawstring

Добавлено через 7 минут
C#
1
2
3
4
 int ss = (int)(g.MeasureString(nameHotel, drawFontBold).ToSize().Height);
                var textBounds = new RectangleF(0, 938-ss, 1920, 1080);
                textBounds.Inflate(-40, -0);
                g.DrawString(nameHotel, drawFontBold, Brushes.White, textBounds);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2018, 02:05
Ответы с готовыми решениями:

Рисование (bitmap, picturebox)
Здравствуйте, помогите пожалуйста, по коду: private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { ...

Рисование Bitmap-ов на форме
Подскажите , как на форме нарисовать несколько Bitmap-ов , и динамически менять их место-положение ?

Нарисовать прошлый Bitmap на новом так, чтобы небыл растянут рисунок, если новый Bitmap больше размером
Короче пытался сделать такое дело: Рисую фигуры на форме, когда отпускаю левую кнопку мыши (когда кнопка зажата, то растягивается например...

7
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
17.05.2018, 02:21
dem_on, покажите ваш код.

Добавлено через 10 минут
А вы смотрели в отладчике какое значение имеет величина 938-ss?
0
0 / 0 / 3
Регистрация: 21.07.2012
Сообщений: 136
17.05.2018, 02:25  [ТС]
да, даже просто писал 800 не вычетая но и по верхнему краю не рисует одинаково. размер шрифтов 35 и 60
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
17.05.2018, 03:09
Отладка говорит, что метод Inflate не только изменяет размеры прямоугольника, но и изменяет его location, то есть размер прямоугольника уменьшился на (40*2)px по оси X, при этом его location увеличился на 40 по оси X.

Как вариант, попробуйте после вызова Inflate явно задавать расположение прямоугольнику, либо вообще не использовать Inflate - только задать Location.
Типа того:
C#
1
2
3
var oldLoc = textBounds.Location;
textBounds.Inflate(-40, -0);
textBounds.Location = new PointF(oldLoc.X, oldLoc.Y);
1
0 / 0 / 3
Регистрация: 21.07.2012
Сообщений: 136
17.05.2018, 03:14  [ТС]
я пробовал g.DrawString(nameHotel, drawFontBold, Brushes.White, new point(x,y)); тоже самое.

Добавлено через 41 секунду
попробую еще так как вы написали
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
17.05.2018, 03:40
Проблема устранена?
У себя потестировал, если использовать вышеуказанный код, то надпись остается на месте.

И я не понимаю, почему у вас задаются размеры прямоугольника 1920 на 1080 (то есть по сути весь экран монитора), и при этом вы хотите сместить этот прямоугольник еще куда-то. Это ведь просто область для текста, ятп, не нужен такой размер.
0
0 / 0 / 3
Регистрация: 21.07.2012
Сообщений: 136
17.05.2018, 15:33  [ТС]
не получилось. по поводу 1920 на 1080 исправил 1920 на 220 но это не существенно я ж создаю область и уменьшаю ее чтобы не вылезло за граници textBounds.Inflate(-40, -0);
Миниатюры
Рисование текста на bitmap  
0
0 / 0 / 3
Регистрация: 21.07.2012
Сообщений: 136
17.05.2018, 16:15  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 for (int i = 36; i < 61; i++)
                {
                    drawFontBold = new Font("Harmonia Sans Pro Cyr", i, FontStyle.Bold);
                    size = (i-36)/2;
                    if (g.MeasureString(nameHotel, drawFontBold).Width > 1840)
                    {
                        i--;
                        size = (i-36)/2;
                        drawFontBold = new Font("Harmonia Sans Pro Cyr", i, FontStyle.Bold);
                        break;
                    }
                }
 
                g.TextRenderingHint = TextRenderingHint.AntiAlias;
                int ss = (int)(g.MeasureString(nameHotel, drawFontBold).ToSize().Height);
                var textBounds = new RectangleF(0, 938-ss+size, 1920, 220);               
                textBounds.Inflate(-40, -0);                
                g.DrawString(nameHotel, drawFontBold, Brushes.White, textBounds);
сделал так, решение так себе, но работает. переменной size компенсирую увеличение шрифта. подобрал опытным путем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2018, 16:15
Помогаю со студенческими работами здесь

Происходит ли "утечка памяти" при повторном выполнении: Bitmap bm1 = new Bitmap
Здравствуйте ! Подскажите, пожалуйста, происходит ли &quot;утечка памяти&quot; при создании объекта bm1 и, если не сложно - как её избежать. ...

Рисование BITMAP-ов
Дайте, пожалуйста, ссылку на исходник полностью рабочего примера (а не одной процедуры рисования) рисования картинки средствами только...

Рисование на Bitmap
В общем делал приложение на Windows Form и тк на нем сложно реализовать что то хоть более менее не стандартное, я делал элементы управления...

Рисование Bitmap'ов
Проблема в следующем: нужно выводить bitmap'ы из ресурсов в нужную часть окна. Использую двойной буфер. Вопрос: есть ли какая-то функция,...

Рисование bitmap'ов (имитация движения)
Здраствуйте.Вопрос по Win API\C++, пишу в Visual Studio 2008.Решил написать на форум,так как сам не могу понять почему некорректно работают...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru