vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 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 - Ein- und Umsteiger
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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Hintergrundgrafik zur Laufzeit ändern unter Berücksichtung d...2.465Clichard12.12.12 13:18
Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtu...1.726Manfred X12.12.12 20:04
Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtu...1.547Clichard13.12.12 10:07
Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtu...1.668Manfred X13.12.12 11:26
Re: Hintergrundgrafik zur Laufzeit ändern unter Berücksichtu...1.513Clichard21.12.12 11:29

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