vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

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!
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
mehrere Layer zeichnen3.107Goblinkiller30.12.10 11:45
Re: mehrere Layer zeichnen2.567ModeratorRalfE30.12.10 17:41
Re: mehrere Layer zeichnen2.519Goblinkiller30.12.10 18:36

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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