Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что делает метод BeginContainer объекта Graphics? / 13 сообщений из 13, страница 1 из 1
01.10.2015, 23:23
    #39066549
Что делает метод BeginContainer объекта Graphics?
Я правильно понимаю, что метод BeginContainer объекта Graphics не сохраняет само изображение, а сохраняет настройки Graphics, такие как преобразование координат например?
Такое ощущение, что если нужно именно сохранить картинку, для этого работают только методы типа Clip, или как-то так называются.
Рисование организую на Panel. Есть ли разница, как получать объект Graphics - по событию Paint из аргумента PaintEventArgs, или напрямую от Panel методом CreateGraphics?
...
Рейтинг: 0 / 0
02.10.2015, 05:31
    #39066591
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает метод BeginContainer объекта Graphics?
Изучающий си решеткаЯ правильно понимаю, что метод BeginContainer объекта Graphics не сохраняет само изображение, а сохраняет настройки Graphics, такие как преобразование координат например?
да

Изучающий си решеткаЕсть ли разница, как получать объект Graphics - по событию Paint из аргумента PaintEventArgs, или напрямую от Panel методом CreateGraphics?
лучше всё рисование делать в методе Paint и получать Graphics из PaintEventArgs
событие возбуждать вызовами Invalidate/Update/Refresh контрола

Изучающий си решеткаТакое ощущение, что если нужно именно сохранить картинку, для этого работают только методы типа Clip, или как-то так называются.

Что значит "сохранить" картинку?
Clip только ограничивает область рисования
...
Рейтинг: 0 / 0
02.10.2015, 14:23
    #39067149
Что делает метод BeginContainer объекта Graphics?
Изопропил,

Сохранить картинку, это желание оптимизировать процесс отрисовки как бы. Если нужно "переместить видовой экран нажатым скроллом" например, то пока не вижу другой возможности, кроме как заново перерисовать все элементы рисунка объектом Graphics события Paint. Это реализовал, но при перемещении картинка не мгновенно перерисовывается, а как бы "моргает".
Или другой момент. Задача сделать "резиновую линию" для элемента, находящегося "в режиме отрисовки", когда резиновая линия рисуется от уже щелкнутой точки до положения мыши. Здесь тоже пока не вижу другой возможности, кроме как сделать Clear() и отрисовать все заново включая точку положения мыши ("зависания" по событию MousMove в Panel).
Для каждого изменения масштаба экрана, смещения, "резиновой линии" все время вызываю методы Draw...(Pen p, Point p1, ...). Вот и подумал, нельзя ли уже нарисованную картинку закинуть в какой-то буфер, и выкинуть снова в Panel но в другом масштабе. Или при прорисовке, нельзя ли всю кучу-последовательность Draw... направить в буфер, а потом в Panel выбросить из буфера готовый результат. Держал в руках давно книгу по созданию CAD, и там вроде была примерно такая мысль.
Или может быть так - это "торможение-моргание" происходит от того, что все Paint обсчитываются на процессоре, а не на видеокарте.
...
Рейтинг: 0 / 0
02.10.2015, 14:52
    #39067178
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает метод BeginContainer объекта Graphics?
Изучающий си решетка). Вот и подумал, нельзя ли уже нарисованную картинку закинуть в какой-то буфер, и выкинуть снова в Panel но в другом масштабе.
можно конечно - Graphics.FromImage , рисовать на картине, нужные фрагметны копировать, но лучше в масштабе 1:1
Изучающий си решеткаИли может быть так - это "торможение-моргание" происходит от того, что все Paint обсчитываются на процессоре, а не на видеокарте
моргание происходит от стирания фона и последующей перерисовки

а вообще - для начала включи двойную буферизацию - https://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.doublebuffered(v=vs.110).aspx
...
Рейтинг: 0 / 0
02.10.2015, 16:34
    #39067281
Что делает метод BeginContainer объекта Graphics?
Изопропил,

Двойная буферизация это свойство, присущее только форме? Для Panel вроде как нет его. Установил на true, не помогло. Ни на что не повлияло. Посмотрите мой проект, может там в другом косяк. Нажмите "массив", "создать", и попробуйте скроллом подвигать. Будет медленная перерисовка.
...
Рейтинг: 0 / 0
02.10.2015, 17:36
    #39067336
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает метод BeginContainer объекта Graphics?
Изучающий си решеткаДля Panel вроде как нет его
в наследнике можно выставить

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
 class PanelFF:Panel
    {
        public PanelFF()
        {
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        }
    }



потом можно оптимизировать дальше
...
Рейтинг: 0 / 0
02.10.2015, 17:38
    #39067338
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает метод BeginContainer объекта Graphics?
Изучающий си решетка,
пилять, панель это и есть форма по сути, закопипасть вот такой код в лоадер Form1
Код: c#
1.
2.
3.
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
            | BindingFlags.Instance | BindingFlags.NonPublic, null,
            panel1, new object[] { true }); 


и будет тебе щасте
...
Рейтинг: 0 / 0
02.10.2015, 18:59
    #39067373
Что делает метод BeginContainer объекта Graphics?
Изопропил,

Не очень понятно как использовать панель, когда она наследник. Форму и элементы управления компоную к конструкторе формы, в VS. Попытался объявить в пространстве имен Проекта вот этот класс-наследник от Panel с добавленными свойствами. И теперь мой конструктор формы выглядит вот так, не очень приглядно. В Проекте есть файл, Дизайнер, и туда пишется информация автоматически от моих действий в конструкторе формы. И как вклиниться в эту зашитую стандартную цепочку со своим самопальным классом-наследником?
...
Рейтинг: 0 / 0
02.10.2015, 19:21
    #39067385
Что делает метод BeginContainer объекта Graphics?
Где-то в степи,

Скопипастил этот код в конструктор своей формы Form1, ну и добавил директиву using System.Reflection. Здорово! Теперь вообще не "моргает"! Просто волшебный эликсир
...
Рейтинг: 0 / 0
02.10.2015, 19:30
    #39067387
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает метод BeginContainer объекта Graphics?
Изучающий си решетка,
ну хоть в конструкторе разместил прально, уже прогресс ( после иницализатора) уже прогресс гы..
...
Рейтинг: 0 / 0
02.10.2015, 19:46
    #39067396
Что делает метод BeginContainer объекта Graphics?
Где-то в степи,

разработчики VS не рекомендуют самостоятельно изменять код инициализатора
...
Рейтинг: 0 / 0
02.10.2015, 20:48
    #39067418
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает метод BeginContainer объекта Graphics?
Изучающий си решетка,
да я не про это.. а что это у вас фон дракульный вы гот или жуткий хацкер, жись и так не айс, а тут такой фон...((
...
Рейтинг: 0 / 0
02.10.2015, 21:09
    #39067428
Что делает метод BeginContainer объекта Graphics?
Где-то в степи,


Где-то в степижись и так не айс, а тут такой фон...((
черный что ли? Для глаз приятнее. Мне кажется во многих чертежных программах черный фон по умолчанию стоит. Белый слишком яркий, посидишь так день и не очень как-то. Смерть кстати в белом
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что делает метод BeginContainer объекта Graphics? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]