Jump to content
Compvision.ru
Sign in to follow this  
DirecTwiX

HBitmap to cvMat

Recommended Posts

Нашёл я функцию перевода HBitmap в IplImage. Решил переписать для cvMat.

При запуске вылетает умирает процесс, чей DC я использовал :D

void hBitmap2Mat(HBITMAP hBmp, cv::Mat &img)

{

	BITMAP bmp;

	GetObject(hBmp,sizeof(BITMAP),&bmp);

	int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8;

	int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U;

	cv::Mat imgT(bmp.bmHeight, bmp.bmWidth, CV_MAKETYPE(depth, nChannels));

	memcpy(imgT.data,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels);

	img=imgT;

}


...

        RECT rect;

	GetClientRect(hWnd, &rect);


	int cx, cy;

	cx=rect.right-rect.left;

	cy=rect.bottom-rect.top;

	HBITMAP hBmp = CreateCompatibleBitmap(hDC, cx, cy);

	SelectObject(myDC, hBmp);

	BitBlt(myDC, 0, 0, cx, cy, hDC, rect.left, rect.top, SRCCOPY);


	cv::Mat img;

	hBitmap2Mat(hBmp, img);

	cv::imshow("1", img);

	cv::waitKey(0);

Вот. Спустя день... Я написал эту штуку) Думаю, пригодится кому-нибудь:
void Bmp2Mat(HDC hDC, HBITMAP hBmp, Mat &img)

{

    BYTE *bmpData = new BYTE[3*img.cols*img.rows];

    BITMAPINFOHEADER bmi={0};


    bmi.biSize = sizeof(BITMAPINFOHEADER);

    bmi.biPlanes = 1;

    bmi.biBitCount = 24;

    bmi.biWidth = img.cols;

    bmi.biHeight = -img.rows;

    bmi.biCompression = BI_RGB;


    GetDIBits(hDC, hBmp, 0, img.rows, bmpData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);

    memcpy(img.data, bmpData, 3*img.cols*img.rows);

    delete [] bmpData;

}

  • Like 2

Share this post


Link to post
Share on other sites

Добрый день! Спасибо за пример кода. Подскажите пожалуйста какой HDC нужно передавать в функцию и как его создать?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×