Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

So erstellen Sie eine transparente Bitmap, die mit Visual Basic

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
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
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.
2,00 3.00

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 94961 – Letzte Überarbeitung: 12/04/2015 09:22:07 – Revision: 2.0

Microsoft Visual Basic 2.0 Standard Edition, Microsoft Visual Basic 3.0 Professional Edition

  • kbnosurvey kbarchive kbmt kbcode KB94961 KbMtde
Feedback