La cuestion es la siguiente: he estado intentando capturar una imagen con una webcam y de esta imagen extraer el array de pixels en RGB 24 ya sea en byte[] o en int[] pues solo he podido hacer que guarde la imagen en un archivo del disco pero esto demora como 2 segundos y pues la idea es hacer fluido la extrcaccion de estos frames ya que no tiene logica hacer que los guarde en disco para despues obtener el array de bits y despues borrar el archivo bmp, este es el fuente que tengo hasta ahora.
void camToDisk(){
//metodo no visible, graba mal el nombre del archivo
char *lBMPFileName = "WebCamSnapshot.bmp";
HWND lWndVideoHandle;
CAPSTATUS lCapStat;
HWND lWND;
lWND = GetDesktopWindow();
ZeroMemory(&lCapStat, sizeof(CAPSTATUS));
lWndVideoHandle = capCreateCaptureWindow((LPCTSTR)"WebCam", WS_CHILD, 0, 0, 320, 240,(HWND) lWND, (int) 1);
capDriverConnect(lWndVideoHandle, 0);
Sleep(1000);
capGetStatus(lWndVideoHandle, &lCapStat, sizeof(CAPSTATUS));
capGrabFrame(lWndVideoHandle);
capEditCopy(lWndVideoHandle);
capFileSaveDIB(lWndVideoHandle, lBMPFileName);
capDriverDisconnect(lWndVideoHandle);
DestroyWindow(lWndVideoHandle);
DestroyWindow(lWND);
}
la cosa es que graba mal el nombre del archivo bmp y encima hay que ponerle extencion bmp y ni idea de por que hace eso
la otra es que encontre que la estructura BITMAPINFO almacena una DIB image pero ni idea de como sacarle el array de pixels en RAW RGB 24
DWORD lWndVideoSize = capGetVideoFormatSize(lWndVideoHandle);
ZeroMemory(&bmpinfo, sizeof(BITMAPINFO));
capGetVideoFormat(lWndVideoHandle, &bmpinfo, sizeof(bmpinfo));
supuestamente la primera linea da el tamaño del formato
la segunda llena la estructura con ceros
y la tercera carga un fotograma en ella
pero ni idea de como hago para convertir una estructura BITMAPINFO en una imagen o si se pued sacarle el array de pixels en RAW RGB 24, agradeceria si alguien me explicara como hacer esto, he buscado esto por toda la red y no he podido encontarar nada busque en el MSDN y nada que me solucione esto.
de antemano gracias x tdo.