vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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 - Fortgeschrittene
Re: Win7, API-Fkt für Bildüberblendungen 
Autor: Manfred X
Datum: 14.04.10 16:26

Hallo!

Hier eine Klasse zum gewichteten Kombinieren 2er Bilder:

Zwei gleichgroße Bilder auf die Eigenschaften
Bitmap1 und Bitmap2 zuweisen.

Abfrage des gewichtet kombinierten Bildes durch
die Eigenschaft Combine, wobei die relative Gewichtung
des ersten Bildes in Prozent als Parameter anzugeben ist.

Ein Überblend-Effekt ist durch wiederholte Abfrage (Combine)
mit fallendem Parameterwert (Percent) möglich - Timer.


Public Class cPicCombine
    'Klasse zum gewichteten Kombinieren zweier gleich großer Bilder
    Dim _b1, _b2 As Bitmap
    Dim _b1_Bytes(), _b2_bytes() As Byte
 
    ''' <summary>Erstes Bild für Kombination</summary>
    Public Property Bitmap1() As Bitmap
        Get
            Return _b1
        End Get
        Set(ByVal value As Bitmap)
            _b1 = DrawBitmap(value)
            _b1_Bytes = GetBytes(_b1)
        End Set
    End Property
 
    ''' <summary>Zweites Bild für Kombination</summary>
    Public Property Bitmap2() As Bitmap
        Get
            Return _b2
        End Get
        Set(ByVal value As Bitmap)
            _b2 = DrawBitmap(value)
            _b2_bytes = GetBytes(_b2)
        End Set
    End Property
 
    Private Function DrawBitmap(ByVal bd As Bitmap) As Bitmap
        'Bitmap als 24Bit-Bitmap zeichnen
        Dim bmp As Bitmap = New System.Drawing.Bitmap(bd.Width, bd.Height, _
        Drawing.Imaging.PixelFormat.Format24bppRgb)
        Dim mg As Drawing.Graphics = Drawing.Graphics.FromImage(bmp)
        Dim bmp_rect As New Drawing.Rectangle(0, 0, bd.Width, bd.Height)
        ' Die geladene Bitmap neu zeichnen 
        mg.DrawImage(bd, bmp_rect)
        ' Zeichnen-Ressourcen freigeben
        mg.Dispose()
        Return bmp
    End Function
 
    Private Function GetBytes(ByVal bmp As Bitmap) As Byte()
        'Bilddaten in Bytearray eintragen
        Dim bmp_rect As New Drawing.Rectangle(0, 0, bmp.Width, bmp.Height)
 
        ' Bilddaten sperren
        Dim bmp_data As Drawing.Imaging.BitmapData = _
          bmp.LockBits(bmp_rect, Drawing.Imaging.ImageLockMode.ReadWrite, _
          bmp.PixelFormat)
 
        ' Adresse des Beginns der Bitmap-Bilddaten ermitteln
        Dim bmp_ptr As IntPtr = bmp_data.Scan0
 
        ' Array für Bitmapdaten in geeigneter Größe erstellen
        ' (24-Bit-Bitmap: 3 Byte / Pixel in Bildbreite)
        Dim bmp_bytes As Integer = bmp.Width * bmp.Height * 3
 
        ' Null-basiertes Byte-Array (muss eindimensional sein)
        ' in der erforderlichen Größe vereinbaren
        Dim bmp_array(0 To bmp_bytes - 1) As Byte
 
        ' Die Bitmapdaten in das Array kopieren
        Runtime.InteropServices.Marshal.Copy(bmp_ptr, bmp_array, 0, bmp_bytes)
 
        ' Die gesperrten Bilddaten freigeben
        bmp.UnlockBits(bmp_data)
 
        Return bmp_array
    End Function
 
    Private Function GetBitmap(ByVal bytes() As Byte, _
         ByVal width As Integer, ByVal height As Integer) As Bitmap
 
        'Bitmap aus Bytearray erstellen
 
        Dim bmp As New Bitmap(width, height, _
          Drawing.Imaging.PixelFormat.Format24bppRgb)
        Dim bmp_rect As New Drawing.Rectangle(0, 0, bmp.Width, bmp.Height)
 
        ' Bilddaten im Speicher sperren
        Dim bmp_data As Drawing.Imaging.BitmapData = _
          bmp.LockBits(bmp_rect, Drawing.Imaging.ImageLockMode.ReadWrite, _
          bmp.PixelFormat)
 
        ' Adresse des Beginns der Bitmap-Bilddaten ermitteln
        Dim bmp_ptr As IntPtr = bmp_data.Scan0
 
        'Bilddaten in Bitmap kopieren
        Runtime.InteropServices.Marshal.Copy(bytes, 0, bmp_ptr, bytes.Length)
 
        ' Die gesperrten Bilddaten im Speicher wieder freigeben
        bmp.UnlockBits(bmp_data)
        Return bmp
    End Function
 
    ''' <summary>Abfrage des kombinierten Bildes (oder Nothing)</summary>
    ''' <param name="percent">Gewicht des ersten Bildes (0-100 Prozent)</param>
    Public ReadOnly Property Combine(ByVal percent As Integer) As Bitmap
        Get
            'Gewichtet kombiniertes Bild zurückgeben
            If _b1 Is Nothing Or _b2 Is Nothing Then Return Nothing
            If _b1.Width <> _b2.Width Then Return Nothing
            If _b2.Height <> _b2.Height Then Return Nothing
            If percent < 0 Or percent > 100 Then Return Nothing
            Dim fak1 As Double = percent / 100
            Dim fak2 As Double = 1.0# - fak1
            Dim bc_bytes(_b1_Bytes.Length - 1) As Byte
            For i As Integer = 0 To _b1_Bytes.Length - 1
                bc_bytes(i) = Getbyte(fak1 * _b1_Bytes(i) + fak2 * _b2_bytes(i))
            Next i
            Return GetBitmap(bc_bytes, _b1.Width, _b1.Height)
        End Get
    End Property
 
    Private Function Getbyte(ByVal v As Double) As Byte
        If v < 0 Then Return 0
        If v > 255 Then Return 255
        Return CByte(v)
    End Function
End Class


Beitrag wurde zuletzt am 14.04.10 um 16:28:22 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Win7, API-Fkt für Bildüberblendungen2.819thuring14.04.10 11:59
Re: Win7, API-Fkt für Bildüberblendungen2.082Manfred X14.04.10 14:46
Re: Win7, API-Fkt für Bildüberblendungen2.063ModeratorDaveS14.04.10 14:51
Re: Win7, API-Fkt für Bildüberblendungen1.986Manfred X14.04.10 15:13
Re: Win7, API-Fkt für Bildüberblendungen2.049ModeratorDaveS14.04.10 15:44
Re: Win7, API-Fkt für Bildüberblendungen2.024thuring14.04.10 14:53
Re: Win7, API-Fkt für Bildüberblendungen2.851Manfred X14.04.10 16:26
Re: Win7, API-Fkt für Bildüberblendungen1.962thuring14.04.10 17:59
Re: Win7, API-Fkt für Bildüberblendungen1.677Mitchi08.04.12 10:12
Re: Win7, API-Fkt für Bildüberblendungen1.643ModeratorDaveS08.04.12 11:06
Re: Win7, API-Fkt für Bildüberblendungen1.572Mitchi10.04.12 11:55
Re: Win7, API-Fkt für Bildüberblendungen1.557Manfred X10.04.12 15:47
Re: Win7, API-Fkt für Bildüberblendungen1.553ModeratorDaveS10.04.12 19:05
Beispiel für Bildüberblendung (ImageList)1.670Manfred X08.04.12 16:35
Re: Beispiel für Bildüberblendung (ImageList)1.684Mitchi10.04.12 11:55
Re: Beispiel für Bildüberblendung (ImageList)1.621ModeratorDaveS10.04.12 19:06

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