Der nachfolgende Tipp zeigt das Software-Alphablending zum Überlagern zweier Bitmaps, wobei eines eine gewisse Transparenz (Alpha-Value) besitzt. Der Alphawert kann variabel im Bereich 0.01 und 0.99 eingestellt werden. Dieser Wert bestimmt die Intensität des Hauptbildes. ' zunächst die benötigten API-Deklarationen Private Declare Function StretchBlt Lib "gdi32" ( _ ByVal hdc As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hSrcDC As Long, _ ByVal xSrc As Long, _ ByVal ySrc As Long, _ ByVal nSrcWidth As Long, _ ByVal nSrcHeight As Long, _ ByVal dwRop As Long) As Long Private Declare Function GetPixel Lib "gdi32" ( _ ByVal hdc As Long, _ ByVal x As Long, _ ByVal y As Long) As Long Private Declare Function SetPixel Lib "gdi32" ( _ ByVal hdc As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal crColor As Long) As Long ' (DWORD) dest = source Private Const SRCCOPY = &HCC0020 Private Type RGBCol Red As Long Green As Long Blue As Long End Type Die Hauptroutine: ' Die Alpha Blending Funktion Public Function AlphaBlend(ByRef Src1Pic As PictureBox, _ ByRef Src2Pic As PictureBox, _ ByRef DestPic As PictureBox, _ ByVal AlphaValue As Currency, ByRef Progress As Label) Dim j As Long, k As Long Dim BackCol As Long, BackRGB As RGBCol Dim ForeCol As Long, ForeRGB As RGBCol Dim NewCol As Long, NewRGB As RGBCol Dim RBitMask As Long, GBitMask As Long Dim BBitMask As Long ' Labelfeld auf 0% setzen und Ziel-Pictureobjekt leeren Progress.Caption = "0%" DestPic.Cls ' Die Hauptschleife für jedes Pixel For j = 0 To DestPic.ScaleWidth For k = 0 To DestPic.ScaleHeight ' Hintergrund-Farbwerte ermitteln BackCol = GetPixel(Src1Pic.hdc, j, k) With BackRGB ' Enthält die Alphafarbe für den Hintergrund .Red = (BackCol And &HFF&) * (1 - AlphaValue) .Green = (BackCol \ &H100& And &HFF&) * _ (1 - AlphaValue) .Blue = (BackCol \ &H10000 And &HFF&) * _ (1 - AlphaValue) End With ' Fordergrund Farbwerte bekommen ForeCol = GetPixel(Src2Pic.hdc, j, k) With ForeRGB ' Enthält die Alphafarbe für den Vordergrund .Red = (ForeCol And &HFF&) * AlphaValue .Green = (ForeCol \ &H100& And &HFF&) * _ AlphaValue .Blue = (ForeCol \ &H10000 And &HFF&) * _ AlphaValue End With ' Farbwerte addieren With NewRGB .Red = ForeRGB.Red + BackRGB.Red .Green = ForeRGB.Green + BackRGB.Green .Blue = ForeRGB.Blue + BackRGB.Blue End With ' Setzt das Ziel-Pixel SetPixel DestPic.hdc, j, k, _ RGB(NewRGB.Red, NewRGB.Green, NewRGB.Blue) ' Labelfeld aktualisieren Progress.Caption = CStr(CInt(Round((100 / _ DestPic.ScaleWidth) * j))) & "%" DoEvents Next k Next j ' Ziel-Pictureobjekt "refreshen" DestPic.Refresh End Function ' Stretcht ein Bitmap mit Hilfe eines temporären Picture-Objektes Public Function StretchPicture(ByRef SrcPic As _ PictureBox, ByRef TmpPic As PictureBox) Set TmpPic.Picture = SrcPic.Picture StretchBlt SrcPic.hdc, 0, 0, SrcPic.ScaleWidth, _ SrcPic.ScaleHeight, TmpPic.hdc, 0, 0, _ TmpPic.ScaleWidth, TmpPic.ScaleHeight, SRCCOPY End Function Wie bereits eingangs erwähnt, empfehlen wir Ihnen das Beispiels-Projekt zu anzuschauen. Hier ist sehr schön zu sehen, wie das AlphaBlending eingesetzt werden kann. Dieser Tipp wurde bereits 23.185 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
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. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
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. |