Como criar um bitmap transparente usando o Visual Basic

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 94961
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Uma imagem transparente mostra o plano de fundo por trás dele em vez da própria imagem. Você pode usar um editor de ícone, como o programa de exemplo IconWorks fornecido com o Visual Basic para criar ícones que contêm partes transparentes. Este artigo mostra como fazer determinadas partes de um bitmap transparente.
Mais Informações
Aqui estão as seis etapas gerais necessárias para criar um bitmap transparente:
  1. Armazene a área ou plano de fundo, onde o bitmap será ser desenhada.
  2. Cria uma máscara monocromática do bitmap que identifica as áreas transparentes do bitmap usando um pixel em branco para indicar as áreas transparentes e um pixel para indicar áreas não-transparentes do bitmap preto.
  3. Combine os pixels da máscara monocromática com o bitmap de plano de fundo usando o operador binário E. Área do plano de fundo onde a parte não-transparente o bitmap aparecerá é feita em preto.
  4. Combine uma cópia invertida da máscara monocromática (etapa 2) com o bitmap de origem usando o operador binário E. As áreas transparentes do bitmap de origem serão feitas em preto.
  5. Combinar o plano de fundo modificado (etapa 3) com o bitmap de origem modificado (etapa 4) usando o operador binário XOR. O plano de fundo mostrará às partes do bitmap transparentes.
  6. Copiar o bitmap resultante para o plano de fundo

Código de exemplo

  1. Inicie o Visual Basic ou no menu File, escolha New Project (ALT, F, N) se o Visual Basic já estiver sendo executado. O Form1 é criado por padrão.
  2. Adicione os seguintes controles com os valores de propriedade associados no Form1:
       Control          Name (or CtlName)  Property Settings   -----------------------------------------------------------------   Picture          pictSource         Picture ="WINDOWS\THATCH.BMP"   Picture          pictDest           Picture ="WINDOWS\ARCHES.BMP"   Command button   cmdCopy            Caption ="Copy"						
  3. No menu ' arquivo ', escolha novo módulo (ALT, F, M). Módulo1 será criado.
  4. Adicione o seguinte código ao procedimento de evento cmdCopy_Click do Form1. Este código chama a função TransparentBlt() para copiar um bitmap de origem para um controle de imagem de destino (plano de fundo). Branco (QBColor(15)) áreas do bitmap são transparentes contra o bitmap de plano de fundo.
       Sub cmdCopy_Click ()     Call TransparentBlt(pictDest, pictSource.Picture, 10, 10, QBColor(15))   End Sub						
  5. Adicione o código a seguir a seção de declarações gerais de Module1. Digite cada instrução Declare como, uma única linha:
       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. Adicione o procedimento Sub seguinte à seção declarações gerais do Module1. TransparentBlt() aceita seis parâmetros: um controle de imagem de destino (destino), um bitmap de origem para se tornar transparente (srcBmp), X, Y coordenadas em pixels, onde você deseja colocar o bitmap de origem no destino (destX e destY) e o valor RGB da cor que você deseja que seja transparente. TransparentBlt() copia o bitmap de origem para qualquer X, Y local no plano de fundo tornar áreas transparentes.
       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. A partir do menu Executar, escolha Start (ALT, R, S) para executar o programa.
  8. Clique no botão Copiar. O padrão thatched na primeira imagem é copiado para criação de imagem (uma imagem de arches) segunda que os arches mostram áreas do padrão thatched anteriormente em branco.
2,00 3.00

Propriedades

ID do Artigo: 94961 - Última Revisão: 12/04/2015 09:22:10 - Revisão: 2.0

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

  • kbnosurvey kbarchive kbmt kbcode KB94961 KbMtpt
Comentários