elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda haciendo foto cpp
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda haciendo foto cpp  (Leído 2,364 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Ayuda haciendo foto cpp
« en: 9 Octubre 2014, 00:06 am »

Vaya hola de nuevo, pensaba que la función que hice que se encargaba de hacer una foto por la webcam no me funciona, pues la programé pero no la probé, tengo esto:

Código
  1. void photo()
  2. {
  3. HWND captura;
  4.  
  5. captura = GetForegroundWindow();
  6.  
  7. for (int i = 0; i<5; i++)
  8. {
  9. capGrabFrame(captura);
  10. Sleep(50);
  11. }
  12.  
  13. capFileSaveDIB(captura, "prueba.bmp");
  14.  
  15. capPreview(captura, FALSE);
  16. DestroyWindow(captura);
  17. captura = NULL;
  18. }
  19.  

Me compila pero no me aparece el archivo prueba.bmp en el proyecto, ¿qué puede fallar? Me he guiado a partir de este tema:

http://foro.elhacker.net/programacion_cc/capturar_webcam_devc-t171392.0.html

Edito: Vaya he probado otros códigos como por ejemplo este que si me compila en codeblocks pero no en MVS13 porque no se como linkar la libreria libvfw32.a lo que da lugar a errores.

Otro código:

Código
  1. void photo()
  2. {
  3. HWND hwndMain; // main window handle
  4. HWND hwndVideo; // video capture window
  5. char szDeviceName[80]; // driver name
  6. char szDeviceVersion[80]; // driver version
  7. char item[161]; // concatinated string
  8. int i; // counter
  9.  
  10.  
  11. //-----------------------------------------------------------------------------
  12. //-----------------Para Obtener el HWND de la consola , sacado de msdn------
  13. #define MY_BUFSIZE 1024
  14. // char pszNewWindowTitle[MY_BUFSIZE];
  15. char pszOldWindowTitle[MY_BUFSIZE];
  16.  
  17.  
  18. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
  19. cout << pszOldWindowTitle << endl;
  20. SetConsoleTitle("deraradfsfsa");
  21.  
  22. Sleep(40);
  23.  
  24. hwndMain = FindWindow(NULL, "deraradfsfsa");
  25. SetConsoleTitle(pszOldWindowTitle);
  26. //-----------------------------------------------------------------------------
  27. //-----------------------------------------------------------------------------
  28.  
  29. //----------------------------Mostrar Drivers---------------------------------
  30. for (i = 0; i<10; i++)
  31. {
  32.  
  33. if (capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName), szDeviceVersion, sizeof(szDeviceVersion)))
  34. {
  35. strcpy_s(item, szDeviceName);
  36. strcat_s(item, " ");
  37. strcat_s(item, szDeviceVersion);
  38. cout << item << endl;
  39.  
  40.  
  41. }
  42. }
  43. //------------------------Proceso de captura----------------------------------
  44.  
  45. hwndVideo = capCreateCaptureWindow("My Capture Window", WS_VISIBLE, 0, 0, 640, 480, hwndMain, 0);
  46. capDriverConnect(hwndVideo, 0);
  47. capPreviewRate(hwndVideo, 66);
  48. capPreview(hwndVideo, true);
  49.  
  50.  
  51. capDlgVideoSource(hwndVideo);
  52.  
  53. /*for(int i=0;i<25;i++)
  54. {
  55. capGrabFrame(hwndVideo);
  56. }*/
  57.  
  58. capFileSaveDIB(hwndVideo, "C:\\Users\\Usuario\\Desktop\\captura.bmp");
  59.  
  60.  
  61. capPreview(hwndVideo, FALSE);
  62. DestroyWindow(hwndVideo);
  63. hwndVideo = NULL;
  64.  
  65. system("Pause");
  66. }

En propiedades proyecto/vinculador/entrada puedo añadir librerias .lib, las .a no las reconoce, en el codeblocks si que se podían incluir, pero en este he buscado y no se como, estaría bien que me dijerais si sabéis.

Al compilar da errores y pone:

Error   3   error LNK2019: símbolo externo _capCreateCaptureWindowA@32 sin resolver al que se hace referencia en la función "void __cdecl photo(void)" (?photo@@YAXXZ)

Error   4   error LNK2019: símbolo externo _capGetDriverDescriptionA@20 sin resolver al que se hace referencia en la función "void __cdecl photo(void)" (?photo@@YAXXZ)   

Ya digo creo que son porque no tengo la librería libvfw32.a, de todas formas la cabecera que tengo tiene:

Código
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <fstream>
  5. #include <cstring>
  6. #include <vfw.h>
  7. #define MY_BUFSIZE 1024
  8. using namespace std;
  9.  
  10. void photo();

El programa da errores, en este code y en el otro si me compila pero no funciona xP

Saludos


« Última modificación: 9 Octubre 2014, 11:04 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda haciendo foto cpp
« Respuesta #1 en: 9 Octubre 2014, 11:09 am »

Las librerias de VC++ son .lib, en este caso necesitas la Vfw32.lib como bien dice en la MSDN.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd756879%28v=vs.85%29.aspx


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda haciendo foto cpp
« Respuesta #2 en: 9 Octubre 2014, 11:18 am »

Ya veo de eso me estaba dando cuenta ahora, al intentar linkar una librería y al abrirla vi que las ".a" que serán para el codeblocks no las reconocía luego linkare la que me pone en el link, :))

Edito: Vaya vaya funcionó ahora probaré a quitar el posit que tapa la webcam y trataré de modificar el codigo para que no muestre os drivers ni habra ventanas.

Vaya pensé que funcionaría me sale la foto toda de negro, el código es el siguiente:

Código
  1. void photo()
  2. {
  3. #define MY_BUFSIZE 1024
  4. HWND hwndMain;
  5. HWND hwndVideo;
  6. char szDeviceName[80];
  7. char szDeviceVersion[80];
  8. char item[161];
  9. int i;
  10.  
  11. char pszOldWindowTitle[MY_BUFSIZE];
  12.  
  13. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
  14. SetConsoleTitle("deraradfsfsa");
  15.  
  16. Sleep(40);
  17.  
  18. hwndMain = FindWindow(NULL, "deraradfsfsa");
  19.  
  20. SetConsoleTitle(pszOldWindowTitle);
  21. hwndVideo = capCreateCaptureWindow("My Capture Window", NULL, 0, 0, 640, 480, hwndMain, 0);
  22.  
  23.  
  24. capDlgVideoSource(hwndVideo);
  25.  
  26. for(int i=0;i<25;i++)
  27. {
  28. capGrabFrame(hwndVideo);
  29. }
  30.  
  31. capFileSaveDIB(hwndVideo, "C:\\Users\\Usuario\\Desktop\\captura.bmp");
  32.  
  33. capPreview(hwndVideo, FALSE);
  34. DestroyWindow(hwndVideo);
  35. hwndVideo = NULL;
  36. }
  37.  

Conseguí quitar las ventanas (aunque en las ventanas elegía el programa para hacer la foto (ciberlink y otro más había) pero antes aun eligiendo programa el programa se bloqueaba, no sé.

¿Es que tengo que elegir un programa externo para que haga la foto? xD y de ser así no puedo coger el de por defecto en vez de tener que clickar uno? xp

El archivo se crea bien, pero pero es todo de negro, la cámara no enciende la lucecita, no debe de trabajar esto.

Saludos



Venga animo, seguro sabéis algo que lo necesito cuanto antes xP, luego subiré más códigos he ire probando yo solo quiero qur haga una foto y cuando el programa reciba una orden el usuario no se debería de dar cuenta vale si sale una luz en la wrbcam pero de lo demas no se debe de enterar ¿qué le falla a mi último code?

Edito: Por lo visto hay que elegir un driver como hp services o ciberlink en mi caso, aun asi no me rula , y se te abre la ventana para elegir driver no puedes cogerlo tu por defecto luego no es muy eficaz arma de spyware xd

Saludos
« Última modificación: 11 Octubre 2014, 13:08 pm por Eternal Idol » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda haciendo foto cpp
« Respuesta #3 en: 11 Octubre 2014, 13:01 pm »

Hola a todos, he estado haciendo progresos, ya he conseguido hacer una foto formato bmp, el problema es que me pide elegir un programa para hacer las fotos a través de esta función: capDriverConnect(), yo lo que quiero es elegir el programa automaticamente, o buscar otro driver de otra manera.


Código
  1. void photo2()
  2. {
  3.                int driver=0;
  4. HWND hwndMain;
  5. HWND hwndVideo;
  6. char szDeviceName[80];
  7. char szDeviceVersion[80];
  8. char item[161];
  9. int i;
  10.  
  11. char pszOldWindowTitle[MY_BUFSIZE];
  12.  
  13. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
  14. SetConsoleTitle("deraradfsfsa");
  15.  
  16. Sleep(40);
  17.  
  18. hwndMain = FindWindow(NULL, "deraradfsfsa");
  19.  
  20. SetConsoleTitle(pszOldWindowTitle);
  21. hwndVideo = capCreateCaptureWindow("My Capture Window", NULL, 0, 0, 640, 480, hwndMain, 0);
  22. capDriverConnect(hwndVideo, 0);//Te abre ventana para elegir driver (quiero que no salga que lo haga automatico
  23. capPreviewRate(hwndVideo, 100);
  24. capPreviewScale(hwndVideo, false);
  25. capPreview(hwndVideo, true);
  26.  
  27.  
  28. capDlgVideoSource(hwndVideo);
  29.  
  30. for (int i = 0; i<25; i++)//Aclara un poco la foto.
  31. {
  32. capGrabFrame(hwndVideo);
  33. }
  34.  
  35. capFileSaveDIB(hwndVideo, "C:\\Users\\Usuario\\Desktop\\captura.bmp");
  36.  
  37. capPreview(hwndVideo, FALSE);
  38. DestroyWindow(hwndVideo);
  39. hwndVideo = NULL;
  40. }
  41.  

La foto la hace pero al hacerla sale una ventana que me pide elegir un programa externo para hacer la imagen, puedo evitar eso?

Estoy probando también con esto para capturar el driver:

Código
  1. /*capDriverConnect(hwndVideo, 0);
  2. WM_CAP_DRIVER_CONNECT wParam = (WPARAM)(iIndex);
  3. lParam = 0D;*/
  4. while (!SendMessage(hwndVideo, WM_CAP_DRIVER_CONNECT, driver,0))
  5. {
  6. driver++;
  7. if (driver>9)
  8. {
  9. DestroyWindow(hwndVideo);
  10. printf("fallo al intentar conectar");
  11. break;
  12. }
  13. }

Funciones:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743891(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd756885(v=vs.85).aspx

Pero aun asi sale la ventana x[]

Saludos.
« Última modificación: 11 Octubre 2014, 13:20 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda haciendo foto cpp
« Respuesta #4 en: 12 Octubre 2014, 12:37 pm »

Hola a todos gente, a pesar de que no tuve mucha información no me rendí y conseguí hacerlo funcionar sin necesidad de que salga ventana, es decir en modo silencioso :)

Aquí el código:

Código
  1. void photo()//Hace 2 fotos ojo para 2 driver cuidado si tiene menos o mas. (poner para 0). o comprobar
  2. {
  3. int driver = 0;
  4. do
  5. {
  6. CvCapture* capture = cvCaptureFromCAM(driver);
  7. if (!capture)
  8. {
  9. break;
  10. }
  11. IplImage* frame = cvQueryFrame(capture);
  12. if (!frame)
  13. {
  14. continue;
  15. }
  16. if (driver == 0)
  17. {
  18. cvSaveImage("pic0.jpg", frame);
  19. cvReleaseCapture(&capture);
  20. }
  21. else
  22. {
  23. cvSaveImage("pic1.jpg", frame);
  24. cvReleaseCapture(&capture);
  25. }
  26. driver++;
  27. } while (driver < 3);
  28. }
  29.  

Lo que pasa es que en cvCaptureFromCAM(driver), si driver es "0" me pilla la ciberlink y me manda una foto falsa de una imagen de una webcam, no de la imagen que saca la webcam, sin embargo si meto un "1"  me pilla el driver de HP services y  ahí si que me saca la foto, pero claro esto para mi ordenador, si yo quiero usar otro ordenador y asegurarme de que no me salgan fotos fake como la de ciberlink que código debería usar?

Aquí lo que hice fue que saque 2 fotos para los 2 primeros driver, pero claro yo quiero solo una y quiero asegurarme de que no sea una foto fake, sabéis algo?

Edito: Bueno os dejo el método automatizado que acabo de hacer:

Código
  1. int photo()//Hace 2 fotos ojo para 2 driver cuidado si tiene menos o mas. (poner para 0). o comprobar
  2. {
  3. int driver = 0;
  4. char nombre[20],numero[10];
  5. do
  6. {
  7. CvCapture* capture = cvCaptureFromCAM(driver);
  8. if (!capture)
  9. {
  10. break;
  11. }
  12. IplImage* frame = cvQueryFrame(capture);
  13. if (!frame)
  14. {
  15. continue;
  16. }
  17. free(nombre);
  18. itoa(driver, numero, 10);
  19. strcpy(nombre, "pic");
  20. strcat(nombre, numero);
  21. strcat(nombre, ".jpg");
  22. cvSaveImage(nombre, frame);
  23. cvReleaseCapture(&capture);
  24. driver++;
  25. } while (driver < 3);
  26. return driver;
  27. }
  28.  

 Vaya para el video ocurre exactamente lo mismo, ademas no graba audio, tengo trabajo aun xd

Saludos. (uso open cv xD)
« Última modificación: 12 Octubre 2014, 13:09 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con una parte del KeyLogger que estoy haciendo
Programación Visual Basic
Shrick 5 2,033 Último mensaje 1 Enero 2007, 20:30 pm
por Shrick
Ayuda, FOTO
Diseño Gráfico
Comunidad Blade 2 3,062 Último mensaje 15 Diciembre 2009, 14:03 pm
por Comunidad Blade
ayuda estoy haciendo un encriptador « 1 2 »
Programación Visual Basic
Arconte 10 6,448 Último mensaje 11 Julio 2012, 09:26 am
por Yoghurt
Ayuda con desencriptación haciendo Server Privado :P
Scripting
Frankosaurus 0 1,467 Último mensaje 8 Julio 2012, 19:16 pm
por Frankosaurus
Hacer zoom en foto y que se vea mas agrandada esa parte de la foto solo
Diseño Gráfico
Anonymous250 3 4,979 Último mensaje 9 Agosto 2012, 17:54 pm
por Azielito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines