Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo utilizar el efecto TransparentBlt para eliminar los bordes blancos en la programación de Windows

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

);

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.