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

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

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

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

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

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

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


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

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

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

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


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


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