Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 22:43   #1
iLeshik
 
Регистрация: 09.05.2009
Сообщений: 3
По умолчанию Capture image from webcamera

вот собственно надо как то получить битмап, создал окно подключил к драйверу вэбкамеры и каждый цикл обновляю изображение, все хорошо на окне все отображается а вот получить битмап никак не получается, помогите ....
iLeshik вне форума Ответить с цитированием
Старый 10.05.2009, 03:20   #2
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

Код:
// Возвращает HDC на канву окна //
BOOL CScreener::GetSmbCanvas(HDC *hdc)
{
	RECT rc;
	HDC hdcSource;
	HBITMAP hbmp;

	// Определить размеры окна	//
	if (!IsWindow(m_hwnd))
		return FALSE;

	GetWindowRect(m_hwnd, &rc);

	DeleteDC(m_hdc);
	// Сделать полный снимок //
	hdcSource = CreateDC("DISPLAY", NULL, NULL, NULL); 
	m_hdc = CreateCompatibleDC(hdcSource); 
	hbmp  = CreateCompatibleBitmap(hdcSource, rc.right-rc.left, rc.bottom-rc.top); 
 
	if (hbmp == 0) 
		return FALSE;
 	if (!SelectObject(m_hdc, hbmp)) 
		return FALSE;
 	if (!BitBlt(m_hdc, 0, 0, rc.right-rc.left, rc.bottom-rc.top, hdcSource, rc.left,rc.top, SRCCOPY)) 
		return FALSE;
	DeleteDC(hdcSource);
	DeleteObject(hbmp);

	if (NULL != *hdc)
		*hdc = m_hdc;
	return TRUE;
}
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 10.05.2009, 09:22   #3
iLeshik
 
Регистрация: 09.05.2009
Сообщений: 3
По умолчанию

ммм... может быть меня не поняли или я вас не понял, вот мой код

Код:
bool
CaptureWindow::getBitmap()
{
	capGrabFrame(this->m_windowHwnd);
	capEditCopy(this->m_windowHwnd);

	EmptyClipboard();
	if(!OpenClipboard(this->m_windowHwnd))
    {
        return false;
    }

    HBITMAP hbitmap = (HBITMAP)GetClipboardData(CF_BITMAP);

    CloseClipboard();

    BITMAP BM;
    GetObject(hbitmap, sizeof(BM), &BM);
    printf("%d\n", BM.bmBits);

    return true;
}
в конце метода в BM все поля вроде заполнены правильно , т.е. размеры, битность установлены а вот поле bmBits равно нулю, вот и вопрос что делать ?
iLeshik вне форума Ответить с цитированием
Старый 10.05.2009, 09:48   #4
iLeshik
 
Регистрация: 09.05.2009
Сообщений: 3
По умолчанию

вот так вот получилось вроде

Код:
bool
CaptureWindow::getBitmap()
{
    SendMessage(this->m_windowHwnd, WM_CAP_GRAB_FRAME, 0, 0L);
    SendMessage(this->m_windowHwnd, WM_CAP_EDIT_COPY, 0, 0L);

	EmptyClipboard();
    CloseClipboard();

	if(IsClipboardFormatAvailable(CF_DIB))
	{
		if(OpenClipboard(this->m_windowHwnd))
		{
			GLOBALHANDLE hGMem;
			LPBITMAPINFO lpBI;
			void* pDIBBits;
			hGMem = GetClipboardData(CF_DIB);
			lpBI = (LPBITMAPINFO)GlobalLock(hGMem);
			pDIBBits = (void*)(lpBI + 1);
			GlobalUnlock(hGMem);
			CloseClipboard();
			printf("%d\n", ((unsigned char*)pDIBBits)[20]);
		}
	}

    return true;
}

Последний раз редактировалось iLeshik; 10.05.2009 в 11:21.
iLeshik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент Image Небесный Мультимедиа в Delphi 8 02.02.2009 19:59
Image IVANSour Общие вопросы Delphi 10 19.01.2009 18:11
image Черничный Общие вопросы Delphi 2 25.06.2008 16:09
картинку в image vitalik007 Общие вопросы Delphi 2 05.11.2007 21:10
image Elm0 Свободное общение 4 21.06.2007 17:34