GDI+, mantener el estado del graphics???

06/04/2005 - 15:51 por darual | Informe spam
Pues resulta que estoy usando GDI+, para generar una serie de gráficos. Pero
me interesa poder grabar un estado actual del graphics, realizar diversas
modificaciones y volver a restaurar el estado anterior.
Pero no me funciona bien, yo estoy utilizando lo siguiente:

Public Sub SaveRestoreMio(ByVal e As PaintEventArgs)
Dim Pen As New Pen(Color.Red)
e.Graphics.DrawRectangle(Pen, 10, 10, 100, 100)

Dim estadoGraphics As Drawing2D.GraphicsState = e.Graphics.Save()

MsgBox("grabado estado")

e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawRectangle(Pen, 110, 10, 100, 100)

If MsgBox("Recuparar estado?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes
Then
e.Graphics.Restore(estadoGraphics)
End If
e.Graphics.DrawRectangle(Pen, 10, 100, 100, 100)

End Sub

No se lo que pasa pero no hace lo que yo quiero, a que se puede deber, estoy
haciendo algo mal??

ayuda please.
 

Leer las respuestas

#1 A.Poblacion
06/04/2005 - 16:04 | Informe spam
El Graphics.Save solo salva el estado, pero no el contenido de los gráficos.
Por ejemplo, si has aplicado un Transform para cambiar de coordenadas y
haces un Save, luego cambias el Transform y dibujas algo, y luego haces un
Restore, recuperas el sistema de coordenadas originales, pero el dibujo
sigue conteniendo lo que hayas pintado mientras las coordenadas estaban
cambiadas.

Te sugiero que salves a un Bitmap el contenido del gráfico, y cuando lo
quieras restaurar le vuelvas a "pegar" el bitmap salvado.


"darual" wrote in message
news:
Pues resulta que estoy usando GDI+, para generar una serie de gráficos.


Pero
me interesa poder grabar un estado actual del graphics, realizar diversas
modificaciones y volver a restaurar el estado anterior.
Pero no me funciona bien, yo estoy utilizando lo siguiente:

Public Sub SaveRestoreMio(ByVal e As PaintEventArgs)
Dim Pen As New Pen(Color.Red)
e.Graphics.DrawRectangle(Pen, 10, 10, 100, 100)

Dim estadoGraphics As Drawing2D.GraphicsState = e.Graphics.Save()

MsgBox("grabado estado")

e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawRectangle(Pen, 110, 10, 100, 100)

If MsgBox("Recuparar estado?", MsgBoxStyle.YesNo) MsgBoxResult.Yes
Then
e.Graphics.Restore(estadoGraphics)
End If
e.Graphics.DrawRectangle(Pen, 10, 100, 100, 100)

End Sub

No se lo que pasa pero no hace lo que yo quiero, a que se puede deber,


estoy
haciendo algo mal??

Preguntas similares