|
| |

VB.NET - Fortgeschrittene| mehrere Layer zeichnen | |  | | Autor: Goblinkiller | | Datum: 30.12.10 11:45 |
| Hallo zusammen!
Ich stehe momentan vor einem Problem und komme einfach nicht weiter, hoffe jemand von euch kann mir dabei helfen...
Ich versuche über mehrere BufferedGraphics-Objekte einzelne Ebenen eines Bildes aufzubauen.
Beispiel:
BufferedGraphics bg1 enthält ein grünes Rechteck (fixe Position)
BufferedGraphics bg2 enthält ein rotes Rechteck (beim Mauszeiger)
Nun will ich zuerst bg1 zeichnen, und danach bg2 [u]transparent darüberlegen. Es wird später noch weitere Ebenen geben, aber ich probiere es erstmal mit diesem vereinfachten Beispiel.
Folgendermaßen habe ich mir das vorgestellt:
Public Class Form1
Dim g As Graphics
Dim bgContext As BufferedGraphicsContext
Dim bg1 As BufferedGraphics
Dim bg2 As BufferedGraphics
Dim rect1 As Rectangle
Dim rect2 As Rectangle
Public Sub init()
Me.DoubleBuffered = True
g = Me.Panel1.CreateGraphics
bgContext = BufferedGraphicsManager.Current
bg1 = bgContext.Allocate(g, Me.Panel1.DisplayRectangle)
bg2 = bgContext.Allocate(g, Me.Panel1.DisplayRectangle)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
init()
End Sub
Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
'Buffer 1
bg1.Graphics.Clear(Color.Transparent)
rect1 = New Rectangle(20, 20, 50, 50)
bg1.Graphics.DrawRectangle(Pens.Green, rect1)
bg1.Graphics.FillRectangle(Brushes.Green, rect1)
bg1.Render(g)
'Buffer 2
bg2.Graphics.Clear(Color.Transparent)
rect2 = New Rectangle(e.X, e.Y, 20, 20)
bg2.Graphics.DrawRectangle(Pens.Red, rect2)
bg2.Render(g)
End Sub
End Class Nun ist aber das Problem, dass die Buffer einander überschreiben. Sie werden also nicht transparent übereinander gelegt...
Bei meinen Recherchen bin ich öfter auf Tutorials gestoßen, die mit Win32 API-Funktionen die Buffer zuerst ineinander kopiert haben und erst dann gezeichnet haben - ist das über .net-Funktionen möglich oder hab ich da generell was falsch verstanden?
Danke für eure Antworten und auf jeden Fall schon mal einen guten Rutsch ins neue Jahr!  |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
| |
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|