Кажется, я не могу понять, как это сделать, я искал в Google и нашел два примера кода, один из библиотеки захвата экрана github и другой в группе сообщений, и ни один из них, похоже, не работает.
У меня есть структура:
struct ClacksScreen
{
HWND hDesktopWnd;
int width, height;
RECT wr, cr;
HDC hdcClacksScreen; // hardware ClacksScreen
HDC hdcMemDC; // ClacksScreen in memory
HBITMAP hbmClacksScreen; //hbitmap of the ClacksScreen
BITMAP bmpClacksScreen;
BITMAPINFOHEADER bi;
};
Это обновлено.У меня определены некоторые функции, в том числе та, которая записывает растровое изображение на диск, все работает нормально, снимок экрана и запись bmp на диск, и это именно то, что я хотел.
Теперь я хочу преобразовать HBITMAPЯ беру экран прямо в cv :: Mat для OpenCV2.1.
Это вроде работает, за исключением того, что изображение чисто серое и оно вылетает.Очевидно, я все еще довольно n00b, когда дело доходит до c ++, так что, вероятно, есть кое-что простое, что я просто не ворчу.
static cv::Mat copyToCVMat(const ClacksScreen * s)
{
cv::Mat image;
image.create(s->bmpClacksScreen.bmWidth, s->bmpClacksScreen.bmHeight, CV_8UC4);
GetDIBits(s->hdcMemDC, s->hbmClacksScreen, 0,
(UINT)s->bmpClacksScreen.bmHeight,
image.data,
(BITMAPINFO *)&s->bi, DIB_RGB_COLORS);
return image;
}
Когда я оборачиваю cv :: imwrite (image);в попытке поймать я получаю ошибку распределения.Очевидно, что в этот момент мы установили, что я не знаю, как это сделать, поэтому любая помощь будет признательна.
ОБНОВЛЕНИЕ
Если я запускаю этот код:
try {
cv::Mat screen = cv::imread("captureqwsx.jpg");
if (!screen.data) {
printf("no image data?");
}
cv::imwrite("out.jpg",screen);
} catch(std::exception e) {
printf("Exception %s\n",e.what());
}
Я получаю вывод:
нет данных изображения?Неправильное распределение исключений
Когда я пытаюсь запустить высокий графический интерфейс, он остается таким же, как и раньше, возникает проблема как для файлов .jpg и .bmps, записанных на диск, которые можно просматривать в средстве просмотра изображений и в MS Paint.
Я попробовал с совершенно другим изображением, .png с веб-сайта, та же проблема.
Так, что я делаю не так в этот момент?