Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2016, 19:59   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Graphics, один код работает, второй такой же - нет

Здравствуйте.
Есть две функции:
1) создаёт изображение Bitmap, выгружает в PictureBox; этот код работает
Код:
Bitmap img=new Bitmap(this.pictutebox1.Width,this.pictutebox1.Height);
this.pictutebox1.Image=Image.FromHbitmap(img.GetHbitmap());
Graphics canvas=Graphics.FromImage(this.pictutebox1.Image);
SolidBrush br=new SolidBrush(Color.FromArgb(255,255,255,255));
Pen p=new Pen(Color.FromArgb(255,0,0,0),1);
canvas.FillRectangle(br,0,0,img.Width-1,img.Height-1);
canvas.DrawRectangle(p,0,0,img.Width-1,img.Height-1);
2) обновляет содержимое по необходимости; этот код не работает - не происходит никаких изменений
Код:
Graphics gr=Graphics.FromImage(this.picturebox1.Image);
Pen p=new Pen(Color.FromArgb(255,0,0,0));
SolidBrush br=new SolidBrush(Color.FromArgb(255,255,255,255));
gr.FillEllipse(br,50,50,100,100);
gr.DrawEllipse(p,50,50,100,100);
Что мне нужно сделать, что бы второй код выполнял требуемые изменения ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 29.11.2016, 20:14   #2
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Я добавил во вторую функцию пересоздание картинки:
Код:
Bitmap img=new Bitmap(this.picturebox1.Image);
this.picturebox1.Image=Image.FromHbitmap(img.GetHbitmap());
// потом Graphics gr ...
И изменения начали появляться ...
Но, на сколько я понимаю, пересоздание той же самой картинки - тоже самое, что "сходить в соседний город через северный полюс". Или я что то неправильно понял ? Может так и должно быть ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 29.11.2016 в 22:40.
OmegaBerkut вне форума Ответить с цитированием
Старый 30.11.2016, 01:33   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Видимо свойство Image возвращает неизменяемый Bitmap. Посмотри в дебаггере адрес памяти, на который указывает возвращаемый объект и тип объекта.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 30.11.2016, 10:20   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Попробуй после вызова перерисовки картинки вызвать picturebox1.Refresh()
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 30.11.2016, 10:34   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А задача-то какая? Для рисования на контроле есть событие Paint.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.11.2016, 20:07   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А задача-то какая?
Задача - рисовать в PictureBox, картинка должна обновляться определённым образом в таймере.
Мой код даёт утечку ... Скорее всего потому что после пересоздания картинки я не удаляю старую из PictureBox.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 06.12.2016, 18:02   #7
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Попробуй после вызова перерисовки картинки вызвать picturebox1.Refresh()
Про Refresh() то я и забыл ... +
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста . Нужно сделать проверку (выходит ли введенный код в массив или нет, если нет то нужно заново запросить ввести код) Smile189 Общие вопросы Delphi 0 23.10.2016 20:56
код в одном проекте работает,в другом нет Миасс Общие вопросы C/C++ 15 08.07.2013 22:43
Почему один и тот же код не работает на разных IDE Dfence11 Общие вопросы C/C++ 3 14.04.2013 12:56
Написал вот такой код, ввода структуры. Первая структурная переменная вводится, а вторая нет. В чем дело? Mik2012 Помощь студентам 1 14.11.2012 20:38
кто может объяснить,почему на моем компе программа работает на других нет?код в Delphi Symba Общие вопросы Delphi 1 24.03.2011 01:03