¤È¤¢¤ë½¸ÃÄ¤Î¥×¥í¥°¥é¥à¥á¥â

OpenCV¤ÎIplImage¤òWin32API¤Ç»È¤¨¤ë¤è¤¦¤ËBMP(DIB)¤ØÊÑ´¹¤·¤Æɽ¼¨¤¹¤ë¡¥
¥½¡¼¥¹¥Õ¥¡¥¤¥ë

IplImage¤«¤éDIB¤ØÊÑ´¹¤¹¤ë´Ø¿ô¤òºî¤ë¡¥
°ú¿ôÀâÌÀ
const IplImage* srcIplImageÊÑ´¹¸µ¤ÎIplImage
BITMAPINFO& bmpInfoBITMAPINFO¹½Â¤ÂÎ
unsigned long* bmpData¼ÂºÝ¤Î²èÁü¥Ç¡¼¥¿
//IplImage ¤«¤éBMP(DIB)¤ØÊÑ´¹¤¹¤ë¡¥
void iplTobmp(const IplImage* srcIplImage, BITMAPINFO& bmpInfo, unsigned long* bmpData)
{
	int width  = srcIplImage->width;
	int height = srcIplImage->height;

	ZeroMemory(&bmpInfo, sizeof(bmpInfo));
	bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	bmpInfo.bmiHeader.biWidth = width;
	bmpInfo.bmiHeader.biHeight = height;
	bmpInfo.bmiHeader.biPlanes = 1;
	bmpInfo.bmiHeader.biBitCount = 32;
	bmpInfo.bmiHeader.biCompression = BI_RGB;
	
	unsigned long pixel;
	unsigned char r, g, b;
	for(int i = 0; i < height; i++){
		for(int j = 0; j < width; j++){
			b = srcIplImage->imageData[srcIplImage->widthStep * i + j * 3];
			g = srcIplImage->imageData[srcIplImage->widthStep * i + j * 3 + 1];
			r = srcIplImage->imageData[srcIplImage->widthStep * i + j * 3 + 2];
			pixel = 0x00000000;
			pixel =  (r << 16) + (g << 8) + b;
			bmpData[j + (height-i-1) * width ] = pixel;
		}
	}
}



ÊÑ¿ô¤òÍÑ°Õ¤¹¤ë¡¥
IplImage* imgFromOpenCV;
BITMAPINFO bmpInfo;
unsigned long* bmpData;		

¤É¤³¤«¤ÇIplImage¤ò¥í¡¼¥É¤·¤Æ¡¤DIB¤ØÊÑ´¹¤¹¤ë¡¥
	//OpenCV¤Ç¥í¡¼¥É
	imgFromOpenCV = cvLoadImage("testimg.jpg", CV_LOAD_IMAGE_COLOR);
	//¥á¥â¥ê¤ò³ÎÊÝ
	bmpData = (LPDWORD)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, imgFromOpenCV->width * imgFromOpenCV->height * 4);
	//iplImage¤«¤éDIB¤ØÊÑ´¹
	iplTobmp(imgFromOpenCV, bmpInfo, bmpData);

WM_PAINT¥á¥Ã¥»¡¼¥¸¤¬Á÷¤é¤ì¤Æ¤­¤¿¤éStretchDIBits¤Çɽ¼¨¤¹¤ë¡¥
	case WM_PAINT:
		//²èÁü¤òɽ¼¨
		StretchDIBits( hDC, 
				0, 0, imgFromOpenCV->width, imgFromOpenCV->height, 
				0, 0, imgFromOpenCV->width, imgFromOpenCV->height, 
				bmpData, &bmpInfo, DIB_RGB_COLORS, SRCCOPY);
		break;

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

¥á¥ó¥Ð¡¼¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹