So erstellen Sie eine transparente Bitmap, die mit Visual Basic

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 94961 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Ein transparentes Bild zeigt den Hintergrund Sie statt des Bildes selbst. Sie können einen Symbol-Editor wie das IconWorks-Beispielprogramm mit Visual Basic bereitgestellten Symbole erstellen, die transparenten Teile enthalten. Dieser Artikel veranschaulicht das bestimmte Teile einer Bitmap transparent zu machen.

Weitere Informationen

Hier sind die sechs allgemeine Schritte, die zur erstellen Sie einer transparenten Bitmap erforderlich:
  1. Speichern der Bereich oder ein Hintergrund, wo die Bitmap gezeichnet werden.
  2. Erstellen Sie eine monochrome Maske der Bitmap die transparente Bereiche der Bitmap, identifiziert indem eine weiße Pixel an transparente Bereiche mit einem schwarzen Pixel nicht transparente Bereiche der Bitmap an.
  3. Kombinieren Sie die Pixel die monochrome Maske mit mithilfe des binären Operators und Hintergrund-Bitmap. Im Bereich Hintergrund, wo der undurchsichtigen Teil der Bitmap angezeigt wird, Schwarz erfolgt.
  4. Eine Invertierte Kopie die monochrome Maske (Schritt 2) mit der Quell-Bitmap mit dem binären und-Operator kombiniert. Die transparenten Bereiche des Quell-Bitmap Schwarz erfolgen.
  5. Kombinieren den geänderten Hintergrund (Schritt 3) mit geänderten Quell-Bitmap (Schritt 4) mit dem binären XOR-Operator. Der Hintergrund wird durch die transparenten Teile der Bitmap angezeigt.
  6. Kopieren Sie die resultierende Bitmap in den Hintergrund

Beispielcode

  1. Starten Sie Visual Basic oder wählen Sie im Menü Datei "Neues Projekt (ALT, F, N) ein, wenn Visual Basic bereits ausgeführt wird. Form1 wird standardmäßig erstellt.
  2. Fügen Sie folgende Steuerelemente zu Form1 hinzu, mit den zugehörigen Eigenschaftswerten:
       Control          Name (or CtlName)  Property Settings
       -----------------------------------------------------------------
       Picture          pictSource         Picture ="WINDOWS\THATCH.BMP"
       Picture          pictDest           Picture ="WINDOWS\ARCHES.BMP"
       Command button   cmdCopy            Caption ="Copy"
    
    						
  3. Wählen Sie das Menü Datei neues Modul (ALT, F, M). Module1 wird erstellt.
  4. Fügen Sie den folgenden Code zur Ereignisprozedur CmdCopy_Click von Form1. Dieser Code Ruft die TransparentBlt()-Funktion, um eine Quell-Bitmap in ein Bildsteuerelement Ziel (Hintergrund) zu kopieren. Weiß (QBColor(15)) Bereiche der Bitmap für das Hintergrundbild transparent sind.
       Sub cmdCopy_Click ()
         Call TransparentBlt(pictDest, pictSource.Picture, 10, 10, QBColor(15))
       End Sub
    
    						
  5. Fügen Sie den folgenden Code im allgemeinen Deklarationsbereich von Module1 hinzu. Geben Sie jede Declare-Anweisung als eine einzelne Zeile:
       Type bitmap
          bmType As Integer
          bmWidth As Integer
          bmHeight As Integer
          bmWidthBytes As Integer
          bmPlanes As String * 1
          bmBitsPixel As String * 1
          bmBits As Long
       End Type
    
       Declare Function BitBlt Lib "GDI" (ByVal srchDC As Integer, ByVal srcX
          As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH
          As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal
          destY As Integer, ByVal op As Long) As Integer
       Declare Function SetBkColor Lib "GDI" (ByVal hDC As Integer, ByVal
          cColor As Long) As Long
       Declare Function CreateCompatibleDC Lib "GDI" (ByVal hDC As Integer)
          As Integer
       Declare Function DeleteDC Lib "GDI" (ByVal hDC As Integer) As Integer
       Declare Function CreateBitmap Lib "GDI" (ByVal nWidth As Integer, ByVal
          nHeight As Integer, ByVal cbPlanes As Integer, ByVal cbBits As
          Integer, lpvBits As Any) As Integer
       Declare Function CreateCompatibleBitmap Lib "GDI" (ByVal hDC As Integer,
          ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer
       Declare Function SelectObject Lib "GDI" (ByVal hDC As Integer, ByVal
          hObject As Integer) As Integer
       Declare Function DeleteObject Lib "GDI" (ByVal hObject As Integer) As
          Integer
       Declare Function GetObj Lib "GDI" Alias "GetObject" (ByVal hObject As
          Integer, ByVal nCount As Integer, bmp As Any) As Integer
       Const SRCCOPY = &HCC0020
       Const SRCAND = &H8800C6
       Const SRCPAINT = &HEE0086
       Const NOTSRCCOPY = &H330008
    
    						
  6. Fügen Sie die folgende Sub-Prozedur zum Abschnitt Allgemeine Deklarationen von Module1 hinzu. TransparentBlt() sechs Parameter akzeptiert: ein Ziel-Bild-Steuerelement (Dest), eine Quell-Bitmap zu transparent (SrcBmp), X, Y Koordinaten in Pixel, wo Sie die Quell-Bitmap auf dem Zielcomputer platzieren möchten (DestX und destY), sowie die RGB-Wert für die Farbe transparent sein soll. TransparentBlt() kopiert die Quell-Bitmap in alle X, Y Speicherort auf den Hintergrund Bereiche transparent machen.
       Sub TransparentBlt (dest As Control, ByVal srcBmp As Integer, ByVal
          destX As Integer, ByVal destY As Integer, ByVal TransColor As Long)
          Const PIXEL = 3
          Dim destScale As Integer
          Dim srcDC As Integer  'source bitmap (color)
          Dim saveDC As Integer 'backup copy of source bitmap
          Dim maskDC As Integer 'mask bitmap (monochrome)
          Dim invDC As Integer  'inverse of mask bitmap (monochrome)
          Dim resultDC As Integer 'combination of source bitmap & background
          Dim bmp As bitmap 'description of the source bitmap
          Dim hResultBmp As Integer 'Bitmap combination of source & background
          Dim hSaveBmp As Integer 'Bitmap stores backup copy of source bitmap
          Dim hMaskBmp As Integer 'Bitmap stores mask (monochrome)
          Dim hInvBmp As Integer  'Bitmap holds inverse of mask (monochrome)
          Dim hPrevBmp As Integer 'Bitmap holds previous bitmap selected in DC
          Dim hSrcPrevBmp As Integer  'Holds previous bitmap in source DC
          Dim hSavePrevBmp As Integer 'Holds previous bitmap in saved DC
          Dim hDestPrevBmp As Integer 'Holds previous bitmap in destination DC
          Dim hMaskPrevBmp As Integer 'Holds previous bitmap in the mask DC
          Dim hInvPrevBmp As Integer 'Holds previous bitmap in inverted mask DC
          Dim OrigColor As Long 'Holds original background color from source DC
          Dim Success As Integer 'Stores result of call to Windows API
          If TypeOf dest Is PictureBox Then 'Ensure objects are picture boxes
            destScale = dest.ScaleMode 'Store ScaleMode to restore later
            dest.ScaleMode = PIXEL 'Set ScaleMode to pixels for Windows GDI
            'Retrieve bitmap to get width (bmp.bmWidth) & height (bmp.bmHeight)
            Success = GetObj(srcBmp, Len(bmp), bmp)
            srcDC = CreateCompatibleDC(dest.hDC)    'Create DC to hold stage
            saveDC = CreateCompatibleDC(dest.hDC)   'Create DC to hold stage
            maskDC = CreateCompatibleDC(dest.hDC)   'Create DC to hold stage
            invDC = CreateCompatibleDC(dest.hDC)    'Create DC to hold stage
            resultDC = CreateCompatibleDC(dest.hDC) 'Create DC to hold stage
            'Create monochrome bitmaps for the mask-related bitmaps:
            hMaskBmp = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, ByVal 0&)
            hInvBmp = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, ByVal 0&)
            'Create color bitmaps for final result & stored copy of source
            hResultBmp = CreateCompatibleBitmap(dest.hDC, bmp.bmWidth,
               bmp.bmHeight)
            hSaveBmp = CreateCompatibleBitmap(dest.hDC, bmp.bmWidth,
               bmp.bmHeight)
            hSrcPrevBmp = SelectObject(srcDC, srcBmp)     'Select bitmap in DC
            hSavePrevBmp = SelectObject(saveDC, hSaveBmp) 'Select bitmap in DC
            hMaskPrevBmp = SelectObject(maskDC, hMaskBmp) 'Select bitmap in DC
            hInvPrevBmp = SelectObject(invDC, hInvBmp)    'Select bitmap in DC
            hDestPrevBmp = SelectObject(resultDC, hResultBmp) 'Select bitmap
            Success = BitBlt(saveDC, 0, 0, bmp.bmWidth, bmp.bmHeight, srcDC,
               0, 0, SRCCOPY) 'Make backup of source bitmap to restore later
            'Create mask: set background color of source to transparent color.
            OrigColor = SetBkColor(srcDC, TransColor)
            Success = BitBlt(maskDC, 0, 0, bmp.bmWidth, bmp.bmHeight, srcDC,
               0, 0, SRCCOPY)
            TransColor = SetBkColor(srcDC, OrigColor)
            'Create inverse of mask to AND w/ source & combine w/ background.
            Success = BitBlt(invDC, 0, 0, bmp.bmWidth, bmp.bmHeight, maskDC,
              0, 0, NOTSRCCOPY)
            'Copy background bitmap to result & create final transparent bitmap
            Success = BitBlt(resultDC, 0, 0, bmp.bmWidth, bmp.bmHeight,
               dest.hDC, destX, destY, SRCCOPY)
            'AND mask bitmap w/ result DC to punch hole in the background by
            'painting black area for non-transparent portion of source bitmap.
            Success = BitBlt(resultDC, 0, 0, bmp.bmWidth, bmp.bmHeight,
               maskDC, 0, 0, SRCAND)
            'AND inverse mask w/ source bitmap to turn off bits associated
            'with transparent area of source bitmap by making it black.
            Success = BitBlt(srcDC, 0, 0, bmp.bmWidth, bmp.bmHeight, invDC,
               0, 0, SRCAND)
            'XOR result w/ source bitmap to make background show through.
            Success = BitBlt(resultDC, 0, 0, bmp.bmWidth, bmp.bmHeight,
               srcDC, 0, 0, SRCPAINT)
            Success = BitBlt(dest.hDC, destX, destY, bmp.bmWidth, bmp.bmHeight,
               resultDC, 0, 0, SRCCOPY) 'Display transparent bitmap on backgrnd
            Success = BitBlt(srcDC, 0, 0, bmp.bmWidth, bmp.bmHeight, saveDC,
               0, 0, SRCCOPY) 'Restore backup of bitmap.
            hPrevBmp = SelectObject(srcDC, hSrcPrevBmp) 'Select orig object
            hPrevBmp = SelectObject(saveDC, hSavePrevBmp) 'Select orig object
            hPrevBmp = SelectObject(resultDC, hDestPrevBmp) 'Select orig object
            hPrevBmp = SelectObject(maskDC, hMaskPrevBmp) 'Select orig object
            hPrevBmp = SelectObject(invDC, hInvPrevBmp) 'Select orig object
            Success = DeleteObject(hSaveBmp)   'Deallocate system resources.
            Success = DeleteObject(hMaskBmp)   'Deallocate system resources.
            Success = DeleteObject(hInvBmp)    'Deallocate system resources.
            Success = DeleteObject(hResultBmp) 'Deallocate system resources.
            Success = DeleteDC(srcDC)          'Deallocate system resources.
            Success = DeleteDC(saveDC)         'Deallocate system resources.
            Success = DeleteDC(invDC)          'Deallocate system resources.
            Success = DeleteDC(maskDC)         'Deallocate system resources.
            Success = DeleteDC(resultDC)       'Deallocate system resources.
            dest.ScaleMode = destScale 'Restore ScaleMode of destination.
          End If
       End Sub
    
    						
  7. Wählen Sie im Ausführen starten (ALT, R, S), um das Programm auszuführen.
  8. Klicken Sie auf die Schaltfläche Kopieren. Thatched Muster in das erste Bild wird auf das zweite Bild (ein Bild des Arches) vornehmen kopiert die Arches über Bereiche des zuvor weiß thatched Musters anzeigen.

Eigenschaften

Artikel-ID: 94961 - Geändert am: Donnerstag, 30. Oktober 2003 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 2.0 Standard Edition
  • Microsoft Visual Basic 3.0 Professional Edition
Keywords: 
kbmt kbcode KB94961 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 94961
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com