Очистка в Graphics. .Clear не катит

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Очистка в Graphics. .Clear не катит

Сообщение MIT » 09.10.2008 (Чт) 19:04

Как очистить изображение с помощью Graphics?

Вроде бы элементарно - все скажут, мол "учи англ. яз, Clear как переводится?", и т.д. НО! Ничего он и не чистит, а тупо закрашивает. А как именно очистить? Чтобы не осталось ничего? .Clear(Color.Transparent) закрашивает бесцветным цветом (тафтология, блин), т.е. по сути ничего и не делает. Так собственно как (или я чего то не понимаю)?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Очистка в Graphics. .Clear не катит

Сообщение Williams » 09.10.2008 (Чт) 19:32

Если рисуешь на экране, то InvalidateRect
И вы думаете, что вас оставят в живых после прочтения этого поста?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 09.10.2008 (Чт) 20:31

А если в
Код: Выделить всё
Private Sub ####_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles ####.Paint
то как :?:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 30.10.2008 (Чт) 21:03

Тема еще актуальна.

Еще раз пересматривая функционал Graphics`а заметил процедуру
Код: Выделить всё
e.Graphics.Restore(GraphicsState)

Остается один вопрос - что такое GraphicsState, понятно, что это состояние, но откуда его взять? Конструктора тут нет, да и в Graphics нет возможности сохранить этот State.
Так, собственно вопрос, что такое GraphicsState, где его взять и зачем он нужен?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Очистка в Graphics. .Clear не катит

Сообщение Williams » 30.10.2008 (Чт) 21:13

GraphicsState используется примерно так:

Код: Выделить всё
Dim g As Graphics = Me.CreateGraphics

        Dim State As System.Drawing.Drawing2D.GraphicsState = g.Save

        g.Restore(State)
И вы думаете, что вас оставят в живых после прочтения этого поста?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Очистка в Graphics. .Clear не катит

Сообщение Nord777 » 31.10.2008 (Пт) 10:03

Чтобы не осталось ничего? .Clear(Color.Transparent)
Если ты вдумаешься в эту фразу, то вопросы отпадут.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 31.10.2008 (Пт) 13:50

Не отпадают почему-то. Может поясните?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Очистка в Graphics. .Clear не катит

Сообщение Nord777 » 01.11.2008 (Сб) 8:25

Потому, что Color.Transparent это фикция. Это не цвет и не может быть им, хоть и принадлежит к структуре Color.
То, что ты хочешь сделать решается прорисовкой определенной части Parent'a.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Очистка в Graphics. .Clear не катит

Сообщение Денис » 01.11.2008 (Сб) 8:39

MIT писал(а):Ничего он и не чистит, а тупо закрашивает... (или я чего то не понимаю)[/size]?

Если подойти к этому вопросу философски, то очистка всегда и везде выполняется путем закраски области цветом по-умолчанию. Если у вас разноцветный бэкграунд, то скорее всего мы имеем дело со слоями.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 01.11.2008 (Сб) 9:49

2nord777:
почитай мой первый пост, там уже написано мое понимание Transparent'а, и оно совпадает с твоим.
2Денис:
это понятно,но возьмем пример:
dim b as new bitmap(100, 100)
dim g as graphics = graphics.fromimage(b)
и здесь весь bitmap чистый, так как очистить image у graphics'а контрола? мне нельзя его закрашивать - надо ОЧИСТИТЬ, чтобы ничего не осталось! Как выкинуть закрашенный объект graphics'а и подсунутьму новый и ЧИСТЫЙ?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Очистка в Graphics. .Clear не катит

Сообщение Денис » 01.11.2008 (Сб) 12:55

MIT писал(а):Как выкинуть закрашенный объект graphics'а и подсунутьму новый и ЧИСТЫЙ?

А это не срабатывает что-ли?
Код: Выделить всё
g = graphics.fromimage(b)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 01.11.2008 (Сб) 13:37

MIT писал(а):graphics'а контрола


Ну-ка, попробуй-ка заменить...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Очистка в Graphics. .Clear не катит

Сообщение Nord777 » 01.11.2008 (Сб) 14:36

так как очистить image у graphics'а контрола?
Color.FromArgb(0,AnyColor) ?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 01.11.2008 (Сб) 19:12

Всмысле g.Clear ?
Если да, то это тоже самое, что и g.Clear(Color.Transparent) (может и нет, но результат тот же - никакого)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Очистка в Graphics. .Clear не катит

Сообщение Nord777 » 01.11.2008 (Сб) 21:16

Обьясняй чего хочешь добиться. В подробностях.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 02.11.2008 (Вс) 14:08

Ну, попробую:

Есть Panel с прозрачным фоном. В событии Paint с помощью e.graphics рисую довольно сложную фигуру с тенями и прозрачностью. При каждом Paint`е необходимо очищать эту панельку и рисовать на ней заново, т.к. Invalidate вызывается не только для полной перерисовки, но и для частичной. Соответственно очищать надо для того, чтобы при последеющей прорисовке элементов с прозрачностью они не накладывались сами на себя.

Понятно (мне со стороны трудновато оценить описаие, т.к. я и так знаю) :?: Или фотки выложить :?:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Очистка в Graphics. .Clear не катит

Сообщение tyomitch » 02.11.2008 (Вс) 17:00

А это ничего, что в PaintEventArgs кроме Graphics приходит ещё и ClipRectangle?
Изображение

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Очистка в Graphics. .Clear не катит

Сообщение Nord777 » 02.11.2008 (Вс) 19:48

MIT мне до сих пор не понятны твои намерения, но очень похоже на очередной велосипед.
Вот код. Работает исправно. Ничего очищать не требуется. Ничего не накладывается. Чем этот код отличается от твоего? Если чувствуешь, что не в состоянии доходчиво обьяснить - сливай сюда свой код, иначе это надолго затянется.
Код: Выделить всё
Public Class Form1
  Dim B As Boolean

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.BackgroundImage = Image.FromFile("AnyImageFile.png")
    Panel1.BackColor = Color.Transparent
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    B = Not B
    Panel1.Invalidate()
  End Sub

  Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    Dim SBr As SolidBrush
    If B Then
      SBr = New SolidBrush(Color.FromArgb(120, Color.Blue))
    Else
      SBr = New SolidBrush(Color.FromArgb(120, Color.Red))
    End If
    e.Graphics.FillRectangle(SBr, New Rectangle(20, 20, 50, 50))
  End Sub

End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 04.11.2008 (Вт) 0:54

2:Nord777
Нет, это(Изображение) не это, у меня код несколько сложнее, завтра выкачу примерчик, вот только до своего компа доберусь, и...
Nord777 писал(а):MIT мне до сих пор не понятны твои намерения

Ну... Э... Что могу сказать? С примером будет полегче (объяснять не надо, а то я уже Изображение (устал, в смысле, спать хочу...))
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Очистка в Graphics. .Clear не катит

Сообщение MIT » 09.11.2008 (Вс) 18:11

Я понял, какую глупость (с вашей точки зрения) спрашивал: ведь если речь идет о стандартных средствах рисования, то да, проблем никаких нет. У меня же контролы рисовались при помощи флага WS_EX_TRANSPARENT, соответственно для их обновления простого Invalidate недостаточно, требуется еще и перерисовка Parent`а. Тема, наверно, закрыта, спасибо за помощь, извините за невнимательность (по отношению к составлению вопроса).
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 5

    TopList