El programa es el siguiente:
simplemente llame a la función ShowMatImgToWnd (CWnd * pWnd, cv :: Mat img) para mostrar la imagen deseada en el control de imagen, donde se ingresa el controlador del control de imagen en el parámetro CWnd * pWnd, y se puede usar GetDlgItem (IDC_picture). ) Y otros métodos para obtener (IDC_picture es la ID del control de imagen), el parámetro Mat img es la imagen que desea mostrar en formato Mat
void ShowMatImgToWnd (CWnd * pWnd, cv :: Mat img)
{
if (img.empty ())
return;
CRect drect;
pWnd-> GetClientRect (& drect); // (drect); (& drect); Ambos métodos están disponibles
CClientDC dc (pWnd);
HDC hDC = dc.GetSafeHdc ();
// Los datos de la imagen en la memoria se copian en la pantalla
BYTE * bitBuffer = NULL;
BITMAPINFO * bitMapinfo = NULL;
int ichannels = img.channels ();
if (ichannels == 1)
{
bitBuffer = nuevo BYTE [40 + 4 * 256];
}
else if (ichannels == 3)
{
bitBuffer = new BYTE [sizeof (BITMAPINFO)];
}
else
{
return;
}
if (bitBuffer == NULL)
{
return;
}
bitMapinfo = (BITMAPINFO *) bitBuffer;
bitMapinfo-> bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
bitMapinfo-> bmiHeader.biHeight = -img.rows; // Si la altura es positiva, la posición inicial del mapa de bits está en la esquina inferior izquierda. Si la altura es negativa, la posición inicial es en la esquina superior izquierda.
bitMapinfo-> bmiHeader.biWidth = img.cols;
bitMapinfo-> bmiHeader.biPlanes = 1; // El nivel del dispositivo de destino debe ser 1
bitMapinfo-> bmiHeader.biBitCount = ichannels * 8; // bits necesarios para cada píxel El número debe ser uno de 1 (color dual), 4 (16 colores), 8 (256 colores) o 24 (color verdadero)
bitMapinfo-> bmiHeader.biCompression = BI_RGB; // Tipo de compresión de mapa de bits, debe ser 0 (sin compresión) ), Uno de 1 (tipo de compresión BI_RLE8) o 2 (tipo de compresión BI_RLE4)
bitMapinfo-> bmiHeader.biSizeImage = 0; // el tamaño del mapa de bits, en bytes
bitMapinfo-> bmiHeader.biXPelsPerMeter = 0; // bit Figura resolución horizontal, píxeles por metro
bitMapinfo-> bmiHeader.biYPelsPerMeter = 0; // Resolución vertical de mapa de bits, píxeles por metro
bitMapinfo-> bmiHeader.biClrUsed = 0; // Número de colores en la tabla de colores realmente utilizados por el
mapa de bits bitMapinfo-> bmiHeader.biClrImportant = 0; // El número de colores importantes en el proceso de visualización de mapa de bits
if (ichannels == 1)
{
for (int i = 0; i <256; i ++)
{// 颜色 的 取值 范围 (0-255)
bitMapinfo-> bmiColors [i] .rgbBlue = bitMapinfo-> bmiColors [i ] .rgbGreen = bitMapinfo-> bmiColors [i] .rgbRed = (BYTE) i;
}
bitMapinfo-> bmiHeader.biClrUsed = 256; // Número de colores en la tabla de colores realmente utilizada por el mapa de bits
}
SetStretchBltMode (hDC, COLORONCOLOR);
StretchDIBits (hDC,
0,
0,
drect.right, // Mostrar ancho de ventana
drect.bottom, // Mostrar alto de ventana
0,
0,
img.cols, // Ancho de imagen
img.rows, // Altura de imagen
img.data,
bitMapinfo,
DIB_RGB_COLORS,
SRCCOPY
);
eliminar [] bitBuffer;
}