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);

=========================================================================================

 

+ Recent posts