vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Hintergrundgrafik zur Laufzeit ändern unter Berücksichtung der transparenz 
Autor: Clichard
Datum: 12.12.12 13:18

Hallo zusammen,

ich stehe bei folgendem Problem echt auf dem Schlauch und hoffe es kann jemand helfen:

1) Ein Panel enthält eine Grafik, deren obere Hälfte den Himmel, die untere Hälfte eine Landschaft zeigen.
2) Auf dieser Grafik liegen weitere Panel's (könnten auch Pictureboxen sein), welche Grafik1 als Hintergrund durchscheinen lassen.

Nun soll zur Laufzeit langsam ein neuer "Himmel" aufgezogen werden, wobei die vordergründigen Grafiken (Bäume, Gebäude etc.) nunmehr diesen, neuen Hintergrund durchscheinen lassen sollen.

Ich hoffe, ich habe das verständlich erklärt

Beitrag wurde zuletzt am 12.12.12 um 13:20:03 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtung der transparenz 
Autor: Manfred X
Datum: 12.12.12 20:04

Hallo!

Verständlich? Nein!

Worum geht's tatsächlich?

Graphik in einen oberen und unteren Teil spalten und den oberen
sukzessive ersetzen (z.B. durch eine Bildfolge, im Sinne einer Animation)?

Verhältnis Vordergrund zu Hintergrund ändern, bzw. die Hintergrundgraphik
sukzessive durch ein zweites Bild überblenden?

Oder geht es um Transparenz? Transparente Gebäude????

Graphiksystem: GDI+, WPF, DirectX, Drittanbieter-Graphikengine?

MfG
Manfred

Beitrag wurde zuletzt am 12.12.12 um 20:06:56 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtung der transparenz 
Autor: Clichard
Datum: 13.12.12 10:07

Erstmal danke für Deine Antwort.
Stell Dir eine Grafik vor, welche in der oberen Hälfte den Himmel abbildet und in der unteren Hälfte eine Landschaft. Darauf habe ich eine PictureBox mit transparenter Grafik gesetzt, genauer gesagt eine Kirche, deren Turm in den oberen Teil der Grafik, den Himmel ragt... bis dahin alles Bestens.

Nun soll der obere Teil der Hintergrundgrafik (der Himmel) durch einen anderen Himmel in einer separaten PictureBox zur Laufzeit getauscht werden, indem er langsam vom Horizont beginnend zum oberen Rand der Form aufgezogen wird.

Ergebnis: Die Kirche ist nunmehr, was den Hintergrund anbelangt zweigeteilt, d.h. auch der in den Himmel ragende Kirchturm erscheint weiterhin vor dem ursprünglichen Hintergrund.

Die Frage ist nun: Kann man und wie kann man diesen 3 "Schichten" eine Z-Order zuteilen, dass besagte Kirche teils vor dem ursprünglichen, teils vor dem neuen Hintergrund korrekt angezeigt wird?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtung der transparenz 
Autor: Manfred X
Datum: 13.12.12 11:26

Hallo!

Ich nehme an, es handelt sich um eine WinForms-Anwendung.

1. Ursprünglichen Hintergrund in eine Bitmap laden (HG)
- Pixelformat 24 oder 32 Bit

2. HG auf Hintergrundbild einer Picturebox zuweisen

3. Kirche mit transparentem Hintergrund in eine Bitmap laden und
auf Image-Eigenschaft der Picturebox zuweisen.

4. Den neuen Hintergrund ebenfalls in eine Bitmap laden, diese Daten sperren
(lockbits/BitmapData) und die Daten in ein Array kopieren (Marshal.Copy).

5. HG-Bilddaten sperren, Daten in ein Array kopieren und die
Horizont-Linienzeile aus dem Array unter 2 in dieses HG-Array eintragen.
HG per unlockbits entsperren und auf Picturebox-Hintergrund zuweisen.
(Vorgang zeilenweise - nach oben laufender Index - wiederholen, bis der
gesamte Himmel ausgetauscht ist.)

Prinzip:
Public Class frmBackground
 
    Dim pb As New PictureBox With _
               {.Parent = Me, .Width = 210, .Height = 200}
    Dim bmp As New Bitmap _
               (200, 200, Imaging.PixelFormat.Format32bppArgb)
    Dim bmpFront As New Bitmap(bmp.Width, bmp.Height)
    Dim WithEvents tim As New Timer With _
               {.Interval = 100, .Enabled = True}
 
    Private Sub frmBackground_Load(sender As System.Object, _
                       e As System.EventArgs) Handles MyBase.Load
 
        'Blauer Hintergrund
        Using gr As Graphics = Graphics.FromImage(bmp)
            gr.Clear(Color.Blue)
        End Using
 
        'Roter Vordergrund (teilweise transparent)
        Using gr As Graphics = Graphics.FromImage(bmpFront)
            gr.Clear(Color.Transparent)
            Dim rect As New Rectangle(40, 60, 50, 50)
            gr.FillRectangle(New SolidBrush(Color.Red), rect)
        End Using
 
        pb.BackgroundImageLayout = ImageLayout.None
        pb.BackgroundImage = bmp
 
        pb.Image = bmpFront
 
        Me.Show()
    End Sub
 
    Private Sub tim_Tick(sender As Object, _
                e As System.EventArgs) Handles tim.Tick
 
        Static line As Integer = bmp.Height \ 2
 
        'Zeilenindex
        line -= 1
        If line < 0 Then Exit Sub
 
        'Bitmap sperren
        Dim rect As New Rectangle(New Point(0, 0), bmp.Size)
        Dim bd As Drawing.Imaging.BitmapData = _
        bmp.LockBits(rect, Imaging.ImageLockMode.ReadWrite, _
                     Imaging.PixelFormat.Format32bppArgb)
 
        'Bitmapdaten besorgen
        Dim picdata(bd.Stride * bmp.Height - 1) As Byte
        System.Runtime.InteropServices.Marshal.Copy _
            (bd.Scan0, picdata, 0, picdata.Length)
 
        'Eine Zeile übertragen: Blau wird Grau
        Dim index As Integer = 0
        For i As Integer = 0 To bd.Stride - 1 Step 4
            index = bd.Stride * line
            picdata(index + i) = 128 : picdata(index + i + 1) = 128
            picdata(index + i + 2) = 128 
            picdata(index + i + 3) = 128
        Next i
 
        System.Runtime.InteropServices.Marshal.Copy _
         (picdata, 0, bd.Scan0, picdata.Length)
 
        bmp.UnlockBits(bd)
        pb.Invalidate()
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtung der transparenz 
Autor: Clichard
Datum: 21.12.12 11:29

Vielen Dank für Deine detailierte Hilfe, werde ich nachher gleich mal ausprobieren.

lG Clichard
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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