Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sreenshoot no visible (https://www.clubdelphi.com/foros/showthread.php?t=83948)

mjjj 19-08-2013 23:25:21

Sreenshoot no visible
 
Estimados, nose donde agregar esta consulta, espero que este bien aca.

Necesito capturar la un screenshot de una camara IP, el fabricante de esta me entrega el comando necesario para correrlo como un http.
Para este agregue un TwebBrowser en un form que se cargue maximizado, y le cargo el comando para obtener el screenshot.
Luego ejecuto el siguiente procedimiento para capturar el contenido del navegador y guardarlo en un archivo.

Código Delphi [-]
var
  DC : HDC;
  bmp: TBitmap;
begin
try
    dc := GetWindowDC(WebBrowser1.Handle);
    bmp := TBitmap.Create;
    bmp.Width := WebBrowser1.Width;
    bmp.Height := WebBrowser1.Height;
    BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, DC, 0, 0, SRCCOPY);
    bmp.SaveToFile('c:\porteria\porteria.bmp');

finally

    bmp.Free;
    ReleaseDC(WebBrowser1.Handle, DC);
  end;
end;

El problema es que para que funcione es necesario visualizar el navegador, y me gustaria que esto lo hiciera en segundo plano.

Se podrá obtern un screeshot de un TwabBrowser (u otro componente), sin tener que estar visulizandolo?

Espero se entienda.
Gracias.

Casimiro Notevi 20-08-2013 09:14:32

Hay varios hilos que tratan ese tema, sobre todo hay uno en particular, muy amplio, pero no lo encuentro :D
Mira los enlaces del final de esta página, a ver si te lleva a alguno de ellos.
O prueba con las búsquedas.

mjjj 20-08-2013 22:17:52

No hay caso con este tema.

Si bien logro capturar la imagen que necesito, por medio del código expuesto, es necesario que me muestre obligadamente el form que contiene el TWebBrowser, y esto confunde de al usuario.

No es posible, abrir un formulario con el TWebBrowser, cargar la página y luego capturar el contenido de este en una imagen, pero sin que se visualice, que el usuario nunca se entere de esto??

Espero me puedan ayudar.

mjjj 21-08-2013 19:11:25

Alguien conoce algún componente aunque sea de pago, que me capture un snapshoot de una camara IP.
Yo he probado con uno de la empresa visioforge, pero el componente hace que se pegue la aplicación, alguien conoce alguien otro?

Idealmente que pueda conectarse y visualizar lo que esta enviado la camara, y cuando lo desee me entregue una imagen.

Gracias

Chris 27-08-2013 20:24:59

La forma en que lo estás haciendo es muy básica. Lamentablemente si la cámara no ofrece una API es muy díficil hacerlo de otra manera.

Windows normalmente no pinta las ventanas o regiones de venta que no son visibles al usuario. Esto es para ahorrar recursos. Es por eso que no puedes obtener la imagen si la ventana no está activa.

Existen varias alternativas que puedes probar. La más fácil es enviar el mensaje WM_PAINT al control del explorador con el handle de tu BMO dónde quieres la imágen. Pero esto no está garantizado que funcione. Depende de la implementación interna del mensaje WM_PAINT.

Otra alternativa es utilizar la API de Desktop Window Manager (DWM). Pero la solución solo funciona en Windows Vista y posterior cre que necesitas Aero activado. http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Una solución más extraña y no estoy completamente seguro si funciona es utilizar los escritorios virtuales de Windows. Muchos desarrolladores desconocen que Windows ofrece escritorios virtuales. No tan potentes como los ofrecidos en los entornos Linux. Pero pueden ser suficientes para que obtengas una solución.

Lamentablemente los escritorios virtuales tienen muchas limitaciones de seguridad. No recuerdo todos los detalles porque fue hace un buen tiempo que trabajé con ellos.

En resumen, has la siguiente prueba.
Crea un escritorio virtual http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Crea tu venta o envíala al nuevo escritorio virtual. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Talvez necesites crear dos ejectuables para implementar SetThreadDesktop. El segundo ejecutable se creará en el segundo escritorio, tomará una el ScreenShot y lo guardará.
Al final, no te olvides de cerrar el escritorio virtual. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Saludos.


La franja horaria es GMT +2. Ahora son las 10:05:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi