
Бывалый

Профиль
Группа: Участник
Сообщений: 226
Регистрация: 13.12.2006
Где: Новосибирск
Репутация: нет Всего: 3
|
Товарищи есть такая проблема я пытаюсь отправить картинку с web-камеры по сети Код | #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <vfw.h> #include <fstream> #include <sstream> #include <vector> #include <iostream> #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "vfw32.lib") using namespace std;
ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName); LRESULT pascal FrameCallbackFunc(HWND hWnd, VIDEOHDR *lpVHdr); LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); HWND hWndC,hWnd;
SOCKET server;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
LPCTSTR lpzClass = TEXT("My Window Class!");
if (!RegMyWindowClass(hInstance, lpzClass)) return 1;
RECT screen_rect; GetWindowRect(GetDesktopWindow(),&screen_rect); int x = screen_rect.right / 2 - 150; int y = screen_rect.bottom / 2 - 75;
hWnd = CreateWindow(lpzClass, TEXT("Dialog Window"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 900, 600, NULL, NULL, hInstance, NULL);
hWndC = capCreateCaptureWindow ( (LPCWSTR) "", WS_CHILD | WS_VISIBLE, 0, 0, 640, 480, (HWND) hWnd, (int) 0);
SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0L);
WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in saddr; saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = INADDR_ANY; saddr.sin_port = htons(8081); bind(server, (SOCKADDR*)&saddr, sizeof(saddr)); listen(server, 0);
capOverlay(hWndC, TRUE); // capPreviewRate(hWndC, 30); //capPreview(hWndC, TRUE);
capSetCallbackOnFrame(hWndC, FrameCallbackFunc);
if(!hWnd) return 2;
MSG msg = {0}; int iGetOk = 0; while ((iGetOk = GetMessage(&msg, NULL, 0, 0 )) != 0) { if (iGetOk == -1) return 3; TranslateMessage(&msg); DispatchMessage(&msg); }
return msg.wParam;
}
ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName) { WNDCLASS wcWindowClass = {0}; wcWindowClass.lpfnWndProc = (WNDPROC)WndProc; wcWindowClass.style = CS_HREDRAW|CS_VREDRAW; wcWindowClass.hInstance = hInst; wcWindowClass.lpszClassName = lpzClassName; wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW); wcWindowClass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE; return RegisterClass(&wcWindowClass); } LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_COMMAND: break; case WM_DESTROY: capDriverDisconnect(hWndC); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
LRESULT pascal FrameCallbackFunc(HWND hWnd, VIDEOHDR *lpVHdr) { tagBITMAP bm; bm.bmWidth=640; bm.bmHeight=480; bm.bmBits=lpVHdr->lpData; VIDEOHDR *testvideo; byte *testbyt; //int a; MoveMemory(&testvideo,&lpVHdr,sizeof(lpVHdr)); testbyt=new byte[lpVHdr->dwBytesUsed]; MoveMemory(&testbyt,&testvideo,sizeof(lpVHdr)); //BITMAP testbmp =new BITMAP(&bm); size_t fileSize=lpVHdr->dwBufferLength; SOCKET client = accept(server, NULL, NULL); ostringstream headerStream; headerStream << "HTTP/1.0 200 OK\r\n" << "Connection: close\r\n" << "Content-Type: image/jpg\r\n"; headerStream << "Content-Length: " << fileSize << "\r\n\r\n"; send(client, headerStream.str().c_str(), headerStream.str().size(), 0); send(client, (char*)testbyt, lpVHdr->dwBufferLength, 0);
return (LRESULT) TRUE ;
}
|
Проблема состоит вот в чём данные с web-камеры я полуаю в формате VIDEOHDR, как его преобразовать в другой формат с помощью которого можно отправить данные и они бы отображались?
|