Cómo utilizar el efecto TransparentBlt para eliminar los bordes blancos en la programación de Windows
La función TransparentBlt se ejecuta en Windows 98/Windows 2000 o superior. Msimg32.dll debe incluirse en el sistema y Msimg32.lib se puede vincular cuando se usa.
TransparentBlt en Windows98 provocará pérdidas de recursos, por lo que no se recomienda utilizar esta función en WIN98.
El prototipo de la función TransparentBlt es el siguiente:
BOOL TransparentBlt(
HDC hdcDest, // Target DC
int nXOriginDest , // Desplazamiento X objetivo
int nYOriginDest, // Desplazamiento Y objetivo
int nWidthDest, // Ancho objetivo
int hHeightDest, // Alto objetivo
HDC hdcSrc, // Fuente DC
int nXOriginSrc, // Punto de partida de la fuente X
int nYOriginSrc, // Punto de partida de la fuente Y
int nWidthSrc, // Ancho de fuente
int nHeightSrc, // Alto de fuente
UINT crTransparent // Color transparente, tipo COLORREF
); p>
Ejemplo de uso:
CBitmap DispBmp;
CBitmap *OldBmp;
CDC SourceDC;
DispBmp.LoadBitmap( "TEST_BITMAP"); //Si es IDB_XXX, ¡no se necesitan comillas!
SourceDC.CreateCompatibleDC(PDC);
OldBmp = SourceDC.SelectObject(&DispBmp);
::TransparentBlt(PDC->m_hDC,0, 0,128, 128, SourceDC.m_hDC,0,0,128,128,RGB(0,0,0));
SourceDC.SelectObject(OldBmp);
Cabe señalar que los bits utilizados por la función TransparentBlt La imagen es de 8 bits o 24 bits.
Además, existen dos funciones similares: StretchBlt y BitBlt, entonces, ¿cuál es la diferencia entre ellas?
BOOL StretchBlt //Esta función copia un recurso de mapa de bits de un área rectangular a otra área rectangular, es decir, escala el mapa de bits, pero no se puede especificar el color transparente
( int x , //Especifique la coordenada X de la esquina superior izquierda del área rectangular de destino
int y, //Especifique la coordenada Y de la esquina superior izquierda del área rectangular de destino
int nWidth, //Especifica el ancho del área rectangular de destino
int nHeight, //Especifica la altura del área rectangular de destino
CDC* pSrcDC,
int xSrc, //Especifique la coordenada X de la esquina superior izquierda del área rectangular de origen
int ySrc, //Especifique la coordenada Y de la esquina superior izquierda del área rectangular de origen
int nSrcWidth, //Especifica el ancho del área rectangular de origen
int nSrcHeight, //Especifica la altura del área rectangular de origen
DWORD dwRop //Este parámetro hace referencia para MSDN, el tipo SRCCOPY es copia directa);
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop); La función también se utiliza para copiar recursos de mapa de bits, pero no tiene la función de escala.
En otras palabras: bitblt envía directamente el CC de origen al CC de destino de acuerdo con el tamaño que especifique, y strechblt ajustará el tamaño de su CC de origen para adaptarse al tamaño del CC de destino que especifique. y luego salida. La imagen generada por strechblt siempre puede llenar el área DC de destino que especifique, pero la imagen generada por bitblt no puede llenar el área DC de destino.