alguien sabe como puedo capturar la pantalla, mas rapido o mejor???

Iniciado por Belial & Grimoire, 3 Septiembre 2007, 02:33 AM

0 Miembros y 7 Visitantes están viendo este tema.

Belial & Grimoire

hola

estoy usando la clase Cjpeg para capturar la pantalla, pero tengo un problema.... cuando creo la imagen por primera vez, no tengo ningun problema pero cuando quiero crear otra ya no puedo... y si la elimino... se tarda demasiado en volver a crear otra captura... y cuando lo intente aumentando el tiempo... no se guarda bien y solo me llega la captura, y cuando la abro no hay nada...

alguien sabe que puedo hacer, o alguien conoce otra forma de crear capturas de pantalla y que no haya tenido problemas...

ya que tambien intente con keybd_event...

pero la imagen que se crea pesa 2.50 MB ... y eso no me gusto mucho...

espero me puedan ayudar

gracias  ;D
.                                 

LeandroA

una forma mas rapida es guardandola con formato .png pero ya vas a depender de
GDI ++

si quieres te paso un modulo para guardar las imagenes en ese formato (pero tene en cuenta que la pc que lo ejecute deve tener gdi plus instalado , en xp ya viene por defecto)

Saludos

HaDeS, -

Una combinacion entre keybd_event y el modulo CJpeg, apenas vine a conocer este modulo asi que no se mucho como se maneja, pero como le di al codigo quedo perfecto :P

Código (vb) [Seleccionar]

Dim ImagenJpg As cJpeg
Dim Calidad%, Milimetros!
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

'Primero capturas la imagen
Private Sub Command1_Click()
Call keybd_event(vbKeySnapshot, 1, 0, 0)
End Sub

'Luego se maximiza el formulario y mete el picture, le pone la calidad que escojemos en el form_load, y luego lo graba en el archivo prueba.jpg
Private Sub Command2_Click()
Form1.WindowState = 2
Picture1.Picture = Clipboard.GetData
ImagenJpg.Quality = Calidad
ImagenJpg.SetSamplingFrequencies 1, 1, 1, 1, 1, 1
DoEvents
If ImagenJpg.SampleHDC(Picture1.hDC, Picture1.ScaleWidth, Picture1.ScaleHeight) = 0 Then
DeNuevo:
    If Dir$("c:\prueba.jpg") <> "" Then
        Kill "c:\prueba.jpg"
        GoTo DeNuevo
    Else
        ImagenJpg.SaveFile ("c:\prueba.jpg")
    End If
End If
End Sub

Private Sub Form_Load()
Set ImagenJpg = New cJpeg
Calidad = 50
If Calidad < 1 Then Calidad = 1
If Calidad > 100 Then Calidad = 100
Picture1.Width = Screen.Width
Picture1.Height = Screen.Height
Picture1.ScaleMode = vbPixels
End Sub

El inconveniente que encontre en este modulo, es que se demora un buen rato convirtiendo el picture a una calidad menor, o igual segun el caso. Es todo, pruebalo y me decis si te funciono.

Saludos ;)

Belial & Grimoire

#3
hola


LeandroA


no sabia eso.. y si kieres colocar el modulo.. te lo agradeceria... siempre es bueno aprender algo nuevo...


HaDeS, -


esta intersante el codigo que colocaste... voy a checarlo... pero tengo el problema que tu tambien tienes... el archivo se tarda mucho en volver a aparecer...

lo unico que se me ocurre es que el programa detecte si el archivo esta listo... y cuando este listo... me mande un mensaje para luego descargarlo... el problema es que se escucha muy chafa para el programa... pero no se me ocurre otra cosa...

por eso, si alguien conoce algun otro modo de capturar la pantalla y que sea mas eficiente... porfavor, diganme..

espero su respuesta

gracias   ;D
.                                 

Porte

Una pregunta estupida, pero ya que no se crear un tema... quisiera preguntarles donde se guarda las capturas de pantallas.
Un saludo.
PORTE

HaDeS, -

El problema esta en que el modulo CJpeg, al llegar a esta parte: SampleHDC(Picture1.hDC, Picture1.ScaleWidth, Picture1.ScaleHeight)
Lo que hace en realidad es esto SampleHDC(Picture1.hDC, 1200, 800), Segun cada resolucion de pantalla, y en el modulo hay varios bucles recorriendo cada pixel del picture, asi que el trabajo se vuelve pesadisimo, y por eso demora tanto en crear.
Con un procesador de 2.3ghz, y una resolucion de 1200 x 800, la imagen se me genero en 4.937 segundos, es mucho.
Pienso que se puede estrechar la imagen con el mismo modulo,o ponerla a una resolucion mas pequeña, como por ejemplo 800 x 600, pero ahora estoy cansado :P. Mañana, digo, ahora mas tarde (por la tarde), retomo a ver y luego te cuento, eso si tengo tiempo.
Mientras, ve mirando si se puede acomodar la imagen a una resolucion pequeña, asi yo creo que si podria dar.
Es todo.

Saludos ;)


Porte:
Si te fijas bien en mi codigo, hay una parte donde se indica la ruta del archivo de la imagen:
Código (vb) [Seleccionar]

    If Dir$("c:\prueba.jpg") <> "" Then
        Kill "c:\prueba.jpg"
        GoTo DeNuevo
    Else
        ImagenJpg.SaveFile ("c:\prueba.jpg")
    End If


Si aplicas el codigo que te puse ahi, la imagen con la captura de pantalla se guardara en c:\prueba.jpg

Saludos de nuevo :)

cobein

El tema es que para guardarla en formato jpg con codigo de visual es my lento, podrias usar GDI o DirectX pero no estan disponibles en todos los sistemas, algo que se me acurre que podrias hacer es escalar la imagen a un 75% o 50% esto va a redicir la calidad un poco y el tamano, y luego usar 7-zip o zlib para comprimirla.
7-zip lo podes llamar directamente usando el shell y tine muy buena compresion.

O sino lo otro podria ser utilizando la tecnica que usan los compresores de video o mismo el gif animado, que seria basicamente mandar la primer imagen completa y de ahi en mas solamente mandar los cambios ,pero esto es un poco mas dificil.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Porte

No te entiendo lo del codigo... en c (disco local) no hay ninguna carpeta llamada prueva.jpg
Perdonen por usurpar el post. :-[ :-[

cobein

Una cosa hay una version un poco mas rapida de ese modulo...mmm Creo que se llama cIjpeg o algo por el estilo
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

HaDeS, -

Bueno, estuve probando con los dos modulos, y aca estan las nuevas estadisticas:

Modulo CJpeg:
Sin compilar: 4.391 Segundos
Compilado: 0.953 Segundos

Modulo CJpegI;
Sin compilar: 3.891 Segundos
Compilado: 0.813 Segundos

Efectivamente Cobein tiene la razon, y el modulo CJpegI difiere al modulo CJpeg por unos 0.14 segundos.
Pueden descargar el modulo desde http://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=50351&lngWId=1

Saludos :D