Есть Dll которая с внешней камеры дает bitmapы. куда помещает не знаю еще..
нужно брать эти битмапы и выводить на экран с большой скоростью(ок. 30 кадров/сек), чтобы получалось видео. Разрешение у камеры пока низкое, изображение монохромное..
Собственно вопрос: Что конкретно стоит изучить досконально(Классы, методы и т.д.) для реализации задачи..
ЗЫ Пишите попроще, я пока скорее чайник...
31.10.07 12:59: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, Tremer, Вы писали:
T>Есть Dll которая с внешней камеры дает bitmapы. куда помещает не знаю еще..
Скорее всего поможет DirectDraw — это набор функций/интерфейсов, которые позволяют копировать изображения напрямую в видеопамять. Примерно выглядит так (взято из реального кода, без редактирования, может быть и неполностью):
// Инициализируем DirectDraw
LPDIRECTDRAW pDD;
LPDIRECTDRAWSURFACE primSurf;
LPDIRECTDRAWSURFACE backSurf;
LPDIRECTDRAWCLIPPER clipper;
if ( FAILED ( DirectDrawCreate ( NULL, &pDD, NULL ) ) )
return 0;
// Проверку ошибок пока :) опустим
pDD->SetCooperativeLevel ( hWnd, DDSCL_NORMAL );
// Основной буфер
DDSURFACEDESC ddsd = {0};
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
pDD->CreateSurface ( &ddsd, &primSurf, NULL );
// Задний буфер
DDSURFACEDESC ddsd1 = {0};
ddsd1.dwSize = sizeof(ddsd);
ddsd1.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd1.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; //DDSCAPS_SYSTEMMEMORY DDSCAPS_VIDEOMEMORY;
ddsd1.dwWidth = magResp.imageX;
ddsd1.dwHeight = magResp.imageY;
pDD->CreateSurface ( &ddsd1, &backSurf, NULL );
// Обрезатель
pDD->CreateClipper ( 0, &clipper, NULL );
primSurf->SetClipper ( clipper );
.....
// Блокируем буфер и рисуем в нем
DDSURFACEDESC sd = {0};
sd.dwSize = sizeof(sd);
state->backSurf->Lock ( NULL, &sd, DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL );
...........
// Разблокируем буфер
state->backSurf->Unlock ( NULL );
// Перебрасываем изображение на основную поверхность
RECT rcDest;
POINT p;
p.x = 0; p.y = 0;
ClientToScreen ( state->hWnd, &p );
GetClientRect ( state->hWnd, &rcDest );
OffsetRect ( &rcDest, p.x, p.y );
state->clipper->SetHWnd ( 0, state->hWnd );
state->primSurf->Blt ( &rcDest, state->backSurf, NULL, DDBLT_WAIT, NULL );