Перейти к содержимому
Compvision.ru
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×