MIL 영상을 bmp로 취득 및 저장하는 방법 정리.
.h 선언
CDC *mp_memory_dc;
const int LIVE_IMAGE_PIXEL_SIZE_X = 1296;
const int LIVE_IMAGE_PIXEL_SIZE_Y = 976;
Cpp 생성부
mp_memory_dc = new CDC();
=========================================================================================
HDC h_dc = mp_memory_dc->GetSafeHdc();
unsigned char *p_data = NULL;
int width = LIVE_IMAGE_PIXEL_SIZE_X;
int height = LIVE_IMAGE_PIXEL_SIZE_Y;
////////////////////////////////////////
BITMAPINFO l_bmp_info;
l_bmp_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
l_bmp_info.bmiHeader.biWidth = width;
l_bmp_info.bmiHeader.biHeight = height * -1;
l_bmp_info.bmiHeader.biPlanes = 1;
l_bmp_info.bmiHeader.biBitCount = 24;
l_bmp_info.bmiHeader.biCompression = BI_RGB;
l_bmp_info.bmiHeader.biSizeImage = (((width * 24 + 31) & ~31) >> 3) * height;
l_bmp_info.bmiHeader.biXPelsPerMeter = 0;
l_bmp_info.bmiHeader.biYPelsPerMeter = 0;
l_bmp_info.bmiHeader.biClrImportant = 0;
l_bmp_info.bmiHeader.biClrUsed = 0;
HBITMAP h_bitmap = ::CreateDIBSection(h_dc, &l_bmp_info, DIB_RGB_COLORS, (void **)&p_data, NULL, NULL);
HDC h_mem_dc = ::CreateCompatibleDC(h_dc);
HBITMAP h_old_bitmap = (HBITMAP)::SelectObject(h_mem_dc, h_bitmap);
unsigned char *pTemp;
pTemp = new unsigned char[width*height*3];
// MIL 함수에서 현재 영상을 pTemp에 담음.
MbufGetColor(m_MilIdImg_Live, M_PACKED+M_BGR24 , M_ALL_BANDS, pTemp);
memcpy(p_data, pTemp, width*height*3);
RECT rect;
rect.right = LIVE_IMAGE_PIXEL_SIZE_X;
rect.bottom = LIVE_IMAGE_PIXEL_SIZE_Y;
rect.left = 50;
rect.top = LIVE_IMAGE_PIXEL_SIZE_Y-50;
::SetTextColor(h_mem_dc, RGB(255,0,0));
::DrawText(h_mem_dc, szOverlayText,strlen(szOverlayText), &rect, DT_LEFT);
memcpy(pTemp, p_data, width*height*3);
// 저장된 pTemp 영상 이런저런 처리 후 MIL에 다시 집어넣기
if(pTemp)
{
MbufPutColor(m_MilIdImg_Grab,M_PACKED+M_BGR24 , M_ALL_BANDS, pTemp);
MbufCopyColor2d(m_MilIdImg_Grab, m_MilIdImg_ForJudge, M_ALL_BANDS,
0, 0, M_ALL_BANDS, m_nLiveImageSizeX,0,m_nLiveImageSizeX, m_nLiveImageSizeY);
}
else
{
MbufCopy(m_MilIdImg_Live, m_MilIdImg_Grab);
MbufCopyColor2d(m_MilIdImg_Grab, m_MilIdImg_ForJudge, M_ALL_BANDS,
0, 0, M_ALL_BANDS, m_nLiveImageSizeX,0,m_nLiveImageSizeX, m_nLiveImageSizeY);
}
delete [] pTemp;
::SelectObject(h_mem_dc, h_old_bitmap);
::DeleteObject(h_bitmap);
::DeleteDC(h_mem_dc);
=========================================================================================