Jak vytvořit průhledné bitmapy jazyka Visual Basic

Překlady článku Překlady článku
ID článku: 94961 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Zobrazuje průhledný obraz pozadí je namísto obrazu sám. Můžete použít editor ikonu jako ukázkový program IconWorks pomocí jazyka Visual Basic, vytvořte ikony, které obsahují průhledné části k dispozici. Tento článek popisuje, jak některé části Bitmapa na průhledný.

Další informace

Zde je šest obecné kroky potřebné k vytvoření průhledné bitmapy:
  1. Uložte oblast nebo pozadí, kam směřuje rastr se stanoví.
  2. Vytvořit masku monochromatické bitové mapy, které identifikuje průhledné oblasti bitmapy pomocí bílé obrazové body označují průhledné oblasti a černé obrazový bod označující neprůhledné oblasti bitmapy.
  3. Kombinovat obrazové body monochromatické masky s rastrový obrázek na pozadí Použití binárního operátoru. Oblast pozadí, kde Zobrazí neprůhledných část bitmapy je provedeno v černé.
  4. Kombinovat se zdrojem obrácené kopie monochromatické masky (krok 2) rastrový obrázek pomocí binárního operátoru. Průhledné oblasti zdrojová bitmapa bude k černé.
  5. Kombinovat s upravenou zdrojová bitmapa upravené pozadí (krok 3) (krok 4) pomocí binární operátor Xor. Pozadí bude prosvítat. průhledné části bitmapy.
  6. Zkopírujte výsledný rastrový obrázek na pozadí

Příklad kódu

  1. Spusťte aplikaci Visual Basic nebo z nabídky Soubor zvolte nový projekt (ALT, F, N) Pokud aplikace Visual Basic je již spuštěna. Ve výchozím nastavení je vytvořen formulář Form1.
  2. Přidejte následující ovládací prvky do formuláře Form1 s hodnotami vlastností:
       Control          Name (or CtlName)  Property Settings
       -----------------------------------------------------------------
       Picture          pictSource         Picture ="WINDOWS\THATCH.BMP"
       Picture          pictDest           Picture ="WINDOWS\ARCHES.BMP"
       Command button   cmdCopy            Caption ="Copy"
    
    						
  3. Z nabídky Soubor zvolte nový modul (ALT, F, M). Modul 1 je vytvořen.
  4. Následující kód přidejte do událostní procedury cmdCopy_Click Formulář1. Tento kód volá funkci TransparentBlt() zkopírovat zdrojový rastrový obrázek ovládací prvek Obrázek cíl (pozadí). Bílá (QBColor(15)) plochy bitmapy jsou neviditelné proti rastrový obrázek na pozadí.
       Sub cmdCopy_Click ()
         Call TransparentBlt(pictDest, pictSource.Picture, 10, 10, QBColor(15))
       End Sub
    
    						
  5. Přidejte následující kód obecné deklarační sekce modul 1. Zadejte každý příkaz Declare jako jeden, jeden řádek:
       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. V části Obecné prohlášení přidejte následující proceduru typu Sub Modul 1. TransparentBlt() přijímá šest parametrů: cílový obrázek ovládací prvek (dest) zdrojová bitmapa se průhledné (srcBmp), X, Y souřadnice v pixelech, kam chcete umístit zdrojová bitmapa cíl (destX a destY) a hodnota RGB pro požadovanou barvu být průhledné. TransparentBlt() zkopíruje zdrojová bitmapa x, Y umístění na pozadí a průhledné oblasti.
       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. Z nabídky Spustit klepněte na tlačítko Start (ALT, R, S), spusťte program.
  8. Klepněte na tlačítko Kopírovat. Thatched vzorek na prvním obrázku je zkopírovat do druhého obrázku (obrázek arches) provedení podbězích zobrazit prostřednictvím oblastí dříve bílé thatched vzorku.

Vlastnosti

ID článku: 94961 - Poslední aktualizace: 23. dubna 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic 2.0 Standard Edition
  • Microsoft Visual Basic 3.0 Professional Edition
Klíčová slova: 
kbcode kbmt KB94961 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:94961
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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