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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как почистить CreateGraphics изображение 
V
    Опции темы
krewin
Дата 27.8.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



  Panel2.CreateGraphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        Dim nn As Image = Image.FromFile(CurDir() & "\img\1.jpeg")
        Panel2.CreateGraphics.DrawImage(nn, 230, 500)

Вот простой код  рисует изображение на панели которая имеет фоновый рисунок. Всю очень просто.

Проблема втом как теперь удалить этот русунок на фоне  ????????????

Я пробывал просто обновит фоновый рисунок , он очищает изображение но смотреть на это обновление просто не приято оно мигает !
Сужествуют другие способы чтобы не трогать фоновый рисунок ?



PM MAIL   Вверх
diadiavova
Дата 27.8.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Для того чтобы прорисовать что-то в панели надо делать это в обработчике её события Paint, а объект Graphics получать из второго аргумента обработчика, а не создавать новый по всякому поводу и без.
Код

    Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        Dim nn As Image = Image.FromFile(CurDir() & "\img\1.jpeg")
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.DrawImage(nn, 230, 500)
    End Sub

Если надо иметь возможность менять рисунок, то тогда его надо передавать в обработчик при помощи свойства какого-нибудь, например так
Код

    Dim _panelBG As Image
    Public Overridable Property PanelBG() As System.Drawing.Image
        Get
            Return _panelBG
        End Get
        Set(ByVal value As System.Drawing.Image)
            _panelBG = value
            Panel1.Invalidate()
        End Set
    End Property
    Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.DrawImage(PanelBG, 230, 500)
    End Sub

Для очистки надо свойству передать Nothing, Если точку прорисовки тоже надо менять, то для неё тоже свойствоо создай(по той же схеме).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
percilacus
Дата 16.9.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Чтоб не мерцало у контролов есть Protected свойство DoubleBuffered. Его надо установить в true. И рисовать в обработчике Paint этого контроля, используя при этом e.Graphics.
Ну а чтобы получить доступ к DoubleBuffered, нужно создать свой класс и унаследовать Panel
Очистить:
nn.Dispose()
Panel2.Invalidate()

Это сообщение отредактировал(а) percilacus - 17.9.2009, 17:29
PM MAIL WWW   Вверх
diadiavova
Дата 16.9.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



А двойная буферизация для прорисовки фонового изображения это не слишком? smile 

Это сообщение отредактировал(а) diadiavova - 16.9.2009, 20:55


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
percilacus
Дата 17.9.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



diadiavova, он же говорит мерцает значит часто перерисовывает
PM MAIL WWW   Вверх
diadiavova
Дата 17.9.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(percilacus @  17.9.2009,  18:31 Найти цитируемый пост)
diadiavova, он же говорит мерцает значит часто перерисовывает 

Это иногда случается из-за того, что код кривой. В таких ситуациях двойная буферизация не помогает.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

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

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


 




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


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

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