Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo usar VB para poner una imagen de forma transparente en Imagen y esperar en línea

Cómo usar VB para poner una imagen de forma transparente en Imagen y esperar en línea

Función pública TranBlt(DestHdc As Long, srcH opcional As Long, tc opcional As Long = -1, IsBmp opcional As Long) As Long

'El parámetro srcHdcOrBmp pasado puede ser hdc o el Handle del objeto Bmp,

'Cuando el parámetro IsBmp es verdadero, srcHdcOrBmp representa el Handle del objeto Bmp, y cuando es falso, representa hdc

' El valor devuelto devuelve un color transparente si tiene éxito y -1 si no tiene éxito

Dim tHdc (3) As MemHdc

Dim J As Long, oc As Long, I As Long, Bm Como BITMAP, cc Mientras, NewDc Mientras,

Dim sw Mientras, sh Mientras, sBmp Mientras, sHdc Mientras, obm Mientras, NewX Mientras, NewY Mientras

Si DestHdc = 0 O srcHdcOrBmp = 0 O W = 1 Y H = 1 Entonces GoTo falla

Si IsBmp Entonces 'Si se pasa el identificador Bmp, se debe crear un DC temporal para él

sBmp = srcHdcOrBmp

tHdc(3) = NewMyHdc(DestHdc, 0 , 0, srcHdcOrBmp)

sHdc = tHdc(3).hdc

De lo contrario

sHdc = srcHdcOrBmp

Si srcW = 0 Entonces sBmp = GetCurrentObject(sHdc, 7)

Finalizar si

Si sHdc = 0 o sBmp = 0, entonces GoTo falla

Si srcW = 0 Entonces 'Si no proporciona el tamaño de la imagen de origen, necesita obtener el tamaño completo de la imagen de origen

GetObj sBmp , Len(Bm), Bm

sw = Bm.bmWidth - srcX

sh = Bm.bmHeight - srcY

Más

sw = srcW

sh = srcH

Finalizar si

Si sw lt 1 o sh lt 1, entonces GoTo falla

>

Si tc = -1 Entonces

cc = GetPixel(sHdc, srcX, srcY) 'Usa el primer píxel en la esquina superior izquierda como color de fondo de la imagen de origen para transparencia

Else

cc = tc

Fin si

Si W lt;gt; sw O H lt;gt entonces

tHdc(2) = NewMyHdc(DestHdc, W, H)

StretchBlt tHdc(2).hdc, 0, 0, W, H, sHdc, srcX, srcY, sw, sh, vbSrcCopy

'Primero escale la imagen de origen y los siguientes pasos son los mismos.

NewDc = tHdc(2).hdc

Más

NewDc = sHdc

NewX = srcX

NewY = srcY

End If

BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert

'Invierte primero la imagen de origen El color (XOR) se dibuja en la imagen de destino. Si el fondo de la imagen de origen es negro, este paso se puede omitir

'El siguiente es el método para crear una imagen de máscara

I = CreateBitmap(W, H, 1, 1, ByVal 0amp;) 'Crea un mapa de bits monocromático

tHdc(0) = NewMyHdc(DestHdc, 0, 0, I) 'Crea un nuevo DC para la imagen monocromática y selecciónela

p>

tHdc(1) = NewMyHdc(DestHdc, W, H) 'Crea otra imagen en color y DC para almacenar la imagen de máscara

oc = SetBkColor (NewDc, cc) 'Cambiar la fuente Cambia el color de fondo de la imagen a transparente

BitBlt tHdc(0).hdc, 0, 0, W, H, NewDc, NewX, NewY, vbSrcCopy

'Primero dibuja la imagen de origen. Ingresa un DC de un solo color, lo que da como resultado una imagen de máscara con solo el frente y el reverso, el color de fondo (color transparente) es negro y los demás son blancos

SetBkColor NewDc, oc 'Restaura el color de fondo de la imagen de origen, lo cual no es necesario, pero es un buen hábito.

BitBlt tHdc(1).hdc, 0, 0, W, H, tHdc(0).hdc, 0, 0, vbSrcCopy

'DC monocromático debe copiarse en color DC puede realizar la operación AND posterior

'La imagen de la máscara está completa y se ha colocado el DC de color

BitBlt DestHdc, X, Y, W, H, tHdc(1). hdc , 0, 0, vbSrcAnd 'Dibujo transparente estándar: elige dibujar el mapa de máscara usando la operación And,

BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert 'Entonces agregue la fuente La imagen se dibuja una vez con color inverso (XOR)

DelMyHdc tHdc(0)

DelMyHdc tHdc(1)

Si tHdc(2) .hdc lt; gt; 0 Entonces DelMyHdc tHdc(2)

Si tHdc(3).hdc lt;gt 0 Entonces DelMyHdc tHdc(3)

TranBlt = cc

Función de salida

falla:

Si tHdc(3).hdc lt;gt 0 Entonces DelMyHdc tHdc(3)

TranBlt = -1

Función final

Función privada NewMyHdc(dHdc As Long, W As Long, H As Long, Opcional Bm As Long) Como MemHdc

Con NewMyHdc

.hdc = CreateCompatibleDC(dHdc)

Si Bm = 0 Entonces

.Bmp = CreateCompatibleBitmap(dHdc, W, H)

De lo contrario

p>

.Bmp = Bm

Finalizar si

.obm = SelectObject(.hdc, .Bmp)

Finalizar Con

Función final

Función privada DelMyHdc(MyHdc como MemHdc, nobmp opcional como booleano) Como MemHdc

Con MyHdc

Si . hdc lt; gt; 0 Y .obm lt;gt; 0 Luego SeleccionarObjeto .hdc, .obm

Si nobmp = False Y .Bmp lt;gt; > Si .hdc lt; gt; 0 entonces eliminarDC .hdc

Finalizar con

Función final

Pon esta función en un BAS, y luego en el formato

TranBlt pic.hdc, X, Y, W, H, PIC2.Picture.Handle, _

TX , TY, TW, TH, , Verdadero

OK