| |
VB.NET - FortgeschritteneRe: 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. | |
Win7, API-Fkt für Bildüberblendungen | 2.819 | thuring | 14.04.10 11:59 | Re: Win7, API-Fkt für Bildüberblendungen | 2.082 | Manfred X | 14.04.10 14:46 | Re: Win7, API-Fkt für Bildüberblendungen | 2.063 | DaveS | 14.04.10 14:51 | Re: Win7, API-Fkt für Bildüberblendungen | 1.986 | Manfred X | 14.04.10 15:13 | Re: Win7, API-Fkt für Bildüberblendungen | 2.049 | DaveS | 14.04.10 15:44 | Re: Win7, API-Fkt für Bildüberblendungen | 2.024 | thuring | 14.04.10 14:53 | Re: Win7, API-Fkt für Bildüberblendungen | 2.851 | Manfred X | 14.04.10 16:26 | Re: Win7, API-Fkt für Bildüberblendungen | 1.962 | thuring | 14.04.10 17:59 | Re: Win7, API-Fkt für Bildüberblendungen | 1.677 | Mitchi | 08.04.12 10:12 | Re: Win7, API-Fkt für Bildüberblendungen | 1.643 | DaveS | 08.04.12 11:06 | Re: Win7, API-Fkt für Bildüberblendungen | 1.572 | Mitchi | 10.04.12 11:55 | Re: Win7, API-Fkt für Bildüberblendungen | 1.557 | Manfred X | 10.04.12 15:47 | Re: Win7, API-Fkt für Bildüberblendungen | 1.553 | DaveS | 10.04.12 19:05 | Beispiel für Bildüberblendung (ImageList) | 1.670 | Manfred X | 08.04.12 16:35 | Re: Beispiel für Bildüberblendung (ImageList) | 1.684 | Mitchi | 10.04.12 11:55 | Re: Beispiel für Bildüberblendung (ImageList) | 1.621 | DaveS | 10.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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere Infos
|