como capturar el contenido de la pantalla (form) y guardarlo en formato de imagen JPG PNG BMP

2,258 views
Skip to first unread message

Marcelo Barberis

unread,
Nov 6, 2010, 3:54:41 AM11/6/10
to publicesvfoxpro
Este codigo lo utilizo para imprimir la pantalla capturada de un form, ahora a este codigo se le puede modificar para que me capture la imagen y me de la opcion de guardarlo como una imagen, como por ejemplo en jpg o png o bmp o tif permitiendome seleccionar donde guardarlo?
Este es el codigo

z = SET("PRINTER", 2)
v = MESSAGEBOX("Este comando Imprimirá el contenido capturado de esta Ventana en la Impresora Predeterminada ";
    +CHR(13)+ z +CHR(13)+ "Continuar S/N", 036, "Imprimir Ventana")
IF v==6
    WAIT WINDOW TIMEOUT 1 "ENVIANDO..."
    _SCREEN.WindowState = 0
    _SCREEN.Width = THISFORM.Width + 10
    _SCREEN.Height = THISFORM.Height + 64
    THISFORM.Top = 0
    THISFORM.Left = 0
    opscreen = CREATEOBJECT("p_screen")
    opscreen.screencapture()
    RELEASE opscreen
    _SCREEN.windowstate = 2
ENDIF

Luis Maria Guayan

unread,
Nov 6, 2010, 8:16:23 AM11/6/10
to publice...@googlegroups.com
Con la clase GDIPlusX eso es fácil.

Mira este código de Cesar Chalom utilizando la Clase GDIPlusX

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
   loBmp = .Bitmap.FromScreen(Thisform)  
   loBmp.Save("C:\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


La última versión (1.20) de GDIPlusX la puedes descargar de http://vfpx.codeplex.com/wikipage?title=GDIPlusX


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

 

Marcelo Barberis

unread,
Nov 6, 2010, 10:06:08 PM11/6/10
to publice...@googlegroups.com
Gracias por tu aporte, lo que tengo un poco de duda es, yo he bajado GDIPlusX_Source_v1.20 lo abri y alli hay dos app System.app, system_leam 1 carpeta Souce en donde tiene varios prg, archivos .h, archivos pjx, y la clase gdiplusx.vcx y vct ahora esta es mi duda, en mi proyecto que tengo que copiar o tener de estos archivos antes mencionados o solamente la clase gdiplusx.vcx, gdiplusx.vct o tengo que copiar todo el contenido de GDIPlusX_Source_v1.20, ahora System.App se lo puede poner directamente en prg de inicio?
Disculpen la ignorancia.
Marcelo
Bolivia

Luis Maria Guayan

unread,
Nov 7, 2010, 10:48:56 AM11/7/10
to publice...@googlegroups.com
La descarga esta completa con todo el código fuente, ya que se trata de un proyecto open source.

Lo único que se necesita en una aplicación, es el archivo system.app en la carpeta raíz de tu aplicación y en tu PRG principal un llamado a DO SYSTEM.APP



Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Marcelo Barberis

unread,
Nov 11, 2010, 4:36:35 AM11/11/10
to publice...@googlegroups.com
Estimados amigos
estuve viendo la funcion con gdiplusX que me pasaron para grabar una imgen de un form en diferentes formatos para luego si poder imprimirlo y tener a la mano en otra aplicacion, bueno yo le hice alguna modificaciones a la que me enviaron y nada, la que me enviaron la que ven abajo se ejecuta y no pasa nada, reviso en algun disco si esta la imagen y nada y entonces lo modifique alguito para ver y nada, bueno esto hice:

System.App
WITH _SCREEN.System.Drawing
   LOCAL myBitmap AS xfcBitmap 
   *** Crear un objeto Bitmap
   myBitmap = .Bitmap.New(GETPICT()) 
   *** Grabar el bitmap en diferentes formatos
   myBitmap.Save(“c:\MyPNG.png”, .Imaging.ImageFormat.Png)
   myBitmap.Save(“c:\MyBMP.bmp”, .Imaging.ImageFormat.Bmp)
   myBitmap.Save(“c:\MyTIFF.tif”, .Imaging.ImageFormat.Tiff)
   myBitmap.Save(“c:\MyJPEG.jpg”, .Imaging.ImageFormat.Jpeg)
   myBitmap.Save(“c:\MyGIF.gif”, .Imaging.ImageFormat.Gif)
ENDWITH

Luis Maria Guayan

unread,
Nov 11, 2010, 6:54:37 AM11/11/10
to publice...@googlegroups.com
La que yo te he enviado, captura la imagen de un formulario (desde donde se debe ejecutar, no desde un PRG)

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
   loBmp = .Bitmap.FromScreen(Thisform)  
   loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


¿Que sistema operativo usas? Si es Vista o Seven, crea una carpeta nueva c:\Imagenes\ y alli intenta guardar, quizas UAC no te permita escribir en la carpeta raíz.

Marcelo Barberis

unread,
Nov 11, 2010, 7:04:21 PM11/11/10
to publice...@googlegroups.com
Estimado amigo
Bueno creo que no me hice entender, perdon, lo que yo necesito es esto: tengo un form con la imagen de una coordenada que deseo guardar como una imagen ya sea en png, jpg... que me de la opcion de elegir donde guardarla y de que tipo seria, como dije antes png, jpg, bmp..., yo en un boton tengo "Capturar imagen" y al hacer clic me tiene que ejecutar el codio para capturar solo la imagen del formulario activo nada mas, el codigo que hice antes de hacer esta consulta solo me envia la imagen a la impresora y la imprime y no quiero eso.
Bueno en realidad eso es lo que deseo.
Marcelo
Bolivia

Marcelo Barberis

unread,
Nov 11, 2010, 7:06:11 PM11/11/10
to publice...@googlegroups.com
El sistema operativo que tengo yo es window 7 pero para el cliente que estoy haciendo pueden tener vista, xp, 7, 98 no se cual es el que tienen ellos.
Marcelo

Luis Maria Guayan

unread,
Nov 11, 2010, 7:42:50 PM11/11/10
to publice...@googlegroups.com
Tienes que utilizar el mismo c�digo:

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
� �loBmp = .Bitmap.FromScreen(Thisform) �
� �loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith

Pero en el llamado en vez del objeto ThisForm, deberias pasar el objeto Image de tu formulario:

�� loBmp = .Bitmap.FromScreen(Thisform.Image1) �


En el ejemplo debe existir la carpeta "C:\Imagenes\". En Vista y Seven no te permitira grabar las im�genes en la carpeta ra�z por UAC y temas de seguridad.


Luis Mar�a Guay�n
Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


El 11/11/2010 21:04, Marcelo Barberis escribi�:
Estimado amigo
Bueno creo que no me hice entender, perdon, lo que yo necesito es esto: tengo un form con la imagen de una coordenada que deseo guardar como una imagen ya sea en png, jpg... que me de la opcion de elegir donde guardarla y de que tipo seria, como dije antes png, jpg, bmp..., yo en un boton tengo "Capturar imagen" y al hacer clic me tiene que ejecutar el codio para capturar solo la imagen del formulario activo nada mas, el codigo que hice antes de hacer esta consulta solo me envia la imagen a la impresora y la imprime y no quiero eso.
Bueno en realidad eso es lo que deseo.
Marcelo
Bolivia

El 11 de noviembre de 2010 07:54, Luis Maria Guayan <luis...@portalfox.com> escribi�:
La que yo te he enviado, captura la imagen de un formulario (desde donde se debe ejecutar, no desde un PRG)

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
� �loBmp = .Bitmap.FromScreen(Thisform) �
� �loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


�Que sistema operativo usas? Si es Vista o Seven, crea una carpeta nueva c:\Imagenes\ y alli intenta guardar, quizas UAC no te permita escribir en la carpeta ra�z.

Luis Mar�a Guay�n
Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

�


El 11/11/2010 06:36, Marcelo Barberis escribi�:
Estimados amigos
estuve viendo la funcion con gdiplusX que me pasaron para grabar una imgen de un form en diferentes formatos para luego si poder imprimirlo y tener a la mano en otra aplicacion, bueno yo le hice alguna modificaciones a la que me enviaron y nada, la que me enviaron la que ven abajo se ejecuta y no pasa nada, reviso en algun disco si esta la imagen y nada y entonces lo modifique alguito para ver y nada, bueno esto hice:

System.App
WITH _SCREEN.System.Drawing
�� LOCAL myBitmap AS xfcBitmap�
���*** Crear un objeto Bitmap
�� myBitmap = .Bitmap.New(GETPICT())�
���*** Grabar el bitmap en diferentes formatos
�� myBitmap.Save(�c:\MyPNG.png�, .Imaging.ImageFormat.Png)
�� myBitmap.Save(�c:\MyBMP.bmp�, .Imaging.ImageFormat.Bmp)
�� myBitmap.Save(�c:\MyTIFF.tif�, .Imaging.ImageFormat.Tiff)
�� myBitmap.Save(�c:\MyJPEG.jpg�, .Imaging.ImageFormat.Jpeg)
�� myBitmap.Save(�c:\MyGIF.gif�, .Imaging.ImageFormat.Gif)
ENDWITH



El 6 de noviembre de 2010 08:16, Luis Maria Guayan <luis...@portalfox.com> escribi�:
Con la clase GDIPlusX eso es f�cil.

Mira este c�digo de Cesar Chalom utilizando la Clase GDIPlusX

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing

� �loBmp = .Bitmap.FromScreen(Thisform) �
� �loBmp.Save("C:\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


La �ltima versi�n (1.20) de GDIPlusX la puedes descargar de http://vfpx.codeplex.com/wikipage?title=GDIPlusX


Luis Mar�a Guay�n
Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

�


El 06/11/2010 04:54, Marcelo Barberis escribi�:
Este codigo lo utilizo para imprimir la pantalla capturada de un form, ahora a este codigo se le puede modificar para que me capture la imagen y me de la opcion de guardarlo como una imagen, como por ejemplo en jpg o png o bmp o tif permitiendome seleccionar donde guardarlo?
Este es el codigo

z = SET("PRINTER", 2)
v = MESSAGEBOX("Este comando Imprimir� el contenido capturado de esta Ventana en la Impresora Predeterminada ";
��� +CHR(13)+ z +CHR(13)+ "Continuar S/N", 036, "Imprimir Ventana")
IF v==6
��� WAIT WINDOW TIMEOUT 1 "ENVIANDO..."
��� _SCREEN.WindowState = 0
��� _SCREEN.Width = THISFORM.Width + 10
��� _SCREEN.Height = THISFORM.Height + 64
��� THISFORM.Top = 0
��� THISFORM.Left = 0
��� opscreen = CREATEOBJECT("p_screen")
��� opscreen.screencapture()
��� RELEASE opscreen
��� _SCREEN.windowstate = 2
ENDIF


Marcelo Barberis

unread,
Nov 11, 2010, 8:55:04 PM11/11/10
to publice...@googlegroups.com
Gracias, por su aporte, una consulta mas sobre este tema, si yo quiero cambiarle el tipo de imagen a jpg por ej. u otro tipo de imagen donde tengo que cambiar el codigo, puede sen en  loBmp.Save("C:\Imagenes\
ImagenCapturada.Png", .Imaging.ImageFormat.Png) y ponerle jpg en donde hay png?
Marcelo
Bolivia


El 11 de noviembre de 2010 20:42, Luis Maria Guayan <luis...@portalfox.com> escribió:
Tienes que utilizar el mismo código:

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
   loBmp = .Bitmap.FromScreen(Thisform)  
   loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith

Pero en el llamado en vez del objeto ThisForm, deberias pasar el objeto Image de tu formulario:

   loBmp = .Bitmap.FromScreen(Thisform.Image1)  


En el ejemplo debe existir la carpeta "C:\Imagenes\". En Vista y Seven no te permitira grabar las imágenes en la carpeta raíz por UAC y temas de seguridad.



Luis María Guayán
Tucumán, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

El 11/11/2010 21:04, Marcelo Barberis escribió:
Estimado amigo
Bueno creo que no me hice entender, perdon, lo que yo necesito es esto: tengo un form con la imagen de una coordenada que deseo guardar como una imagen ya sea en png, jpg... que me de la opcion de elegir donde guardarla y de que tipo seria, como dije antes png, jpg, bmp..., yo en un boton tengo "Capturar imagen" y al hacer clic me tiene que ejecutar el codio para capturar solo la imagen del formulario activo nada mas, el codigo que hice antes de hacer esta consulta solo me envia la imagen a la impresora y la imprime y no quiero eso.
Bueno en realidad eso es lo que deseo.
Marcelo
Bolivia

El 11 de noviembre de 2010 07:54, Luis Maria Guayan <luis...@portalfox.com> escribió:
La que yo te he enviado, captura la imagen de un formulario (desde donde se debe ejecutar, no desde un PRG)

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
   loBmp = .Bitmap.FromScreen(Thisform)  
   loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


¿Que sistema operativo usas? Si es Vista o Seven, crea una carpeta nueva c:\Imagenes\ y alli intenta guardar, quizas UAC no te permita escribir en la carpeta raíz.

Luis María Guayán
Tucumán, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

El 11/11/2010 06:36, Marcelo Barberis escribió:
Estimados amigos
estuve viendo la funcion con gdiplusX que me pasaron para grabar una imgen de un form en diferentes formatos para luego si poder imprimirlo y tener a la mano en otra aplicacion, bueno yo le hice alguna modificaciones a la que me enviaron y nada, la que me enviaron la que ven abajo se ejecuta y no pasa nada, reviso en algun disco si esta la imagen y nada y entonces lo modifique alguito para ver y nada, bueno esto hice:

System.App
WITH _SCREEN.System.Drawing
   LOCAL myBitmap AS xfcBitmap 


   *** Crear un objeto Bitmap

   myBitmap = .Bitmap.New(GETPICT()) 


   *** Grabar el bitmap en diferentes formatos

   myBitmap.Save(“c:\MyPNG.png”, .Imaging.ImageFormat.Png)
   myBitmap.Save(“c:\MyBMP.bmp”, .Imaging.ImageFormat.Bmp)
   myBitmap.Save(“c:\MyTIFF.tif”, .Imaging.ImageFormat.Tiff)
   myBitmap.Save(“c:\MyJPEG.jpg”, .Imaging.ImageFormat.Jpeg)

   myBitmap.Save(“c:\MyGIF.gif”, .Imaging.ImageFormat.Gif)
ENDWITH



El 6 de noviembre de 2010 08:16, Luis Maria Guayan <luis...@portalfox.com> escribió:
Con la clase GDIPlusX eso es fácil.

Mira este código de Cesar Chalom utilizando la Clase GDIPlusX

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing

   loBmp = .Bitmap.FromScreen(Thisform)  

   loBmp.Save("C:\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


La última versión (1.20) de GDIPlusX la puedes descargar de http://vfpx.codeplex.com/wikipage?title=GDIPlusX


Luis María Guayán
Tucumán, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


El 06/11/2010 04:54, Marcelo Barberis escribió:
Este codigo lo utilizo para imprimir la pantalla capturada de un form, ahora a este codigo se le puede modificar para que me capture la imagen y me de la opcion de guardarlo como una imagen, como por ejemplo en jpg o png o bmp o tif permitiendome seleccionar donde guardarlo?
Este es el codigo

z = SET("PRINTER", 2)
v = MESSAGEBOX("Este comando Imprimirá el contenido capturado de esta Ventana en la Impresora Predeterminada ";

    +CHR(13)+ z +CHR(13)+ "Continuar S/N", 036, "Imprimir Ventana")
IF v==6
    WAIT WINDOW TIMEOUT 1 "ENVIANDO..."
    _SCREEN.WindowState = 0

    _SCREEN.Width = THISFORM.Width + 10
    _SCREEN.Height = THISFORM.Height + 64
    THISFORM.Top = 0
    THISFORM.Left = 0
    opscreen = CREATEOBJECT("p_screen")

Luis Maria Guayan

unread,
Nov 11, 2010, 8:58:34 PM11/11/10
to publice...@googlegroups.com
-- Como guardar im�genes en diferentes formatos con GdiPlus-X --
http://www.portalfox.com/article.php?sid=2389


Luis Mar�a Guay�n

Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


El 11/11/2010 22:55, Marcelo Barberis escribi�:
Gracias, por su aporte, una consulta mas sobre este tema, si yo quiero cambiarle el tipo de imagen a jpg por ej. u otro tipo de imagen donde tengo que cambiar el codigo, puede sen en� loBmp.Save("C:\Imagenes\
ImagenCapturada.Png", .Imaging.ImageFormat.Png) y ponerle jpg en donde hay png?
Marcelo
Bolivia


El 11 de noviembre de 2010 20:42, Luis Maria Guayan <luis...@portalfox.com> escribi�:
Tienes que utilizar el mismo c�digo:

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
� �loBmp = .Bitmap.FromScreen(Thisform) �
� �loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith

Pero en el llamado en vez del objeto ThisForm, deberias pasar el objeto Image de tu formulario:

�� loBmp = .Bitmap.FromScreen(Thisform.Image1) �


En el ejemplo debe existir la carpeta "C:\Imagenes\". En Vista y Seven no te permitira grabar las im�genes en la carpeta ra�z por UAC y temas de seguridad.

Luis Mar�a Guay�n

Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


El 11/11/2010 21:04, Marcelo Barberis escribi�:
Estimado amigo
Bueno creo que no me hice entender, perdon, lo que yo necesito es esto: tengo un form con la imagen de una coordenada que deseo guardar como una imagen ya sea en png, jpg... que me de la opcion de elegir donde guardarla y de que tipo seria, como dije antes png, jpg, bmp..., yo en un boton tengo "Capturar imagen" y al hacer clic me tiene que ejecutar el codio para capturar solo la imagen del formulario activo nada mas, el codigo que hice antes de hacer esta consulta solo me envia la imagen a la impresora y la imprime y no quiero eso.
Bueno en realidad eso es lo que deseo.
Marcelo
Bolivia

El 11 de noviembre de 2010 07:54, Luis Maria Guayan <luis...@portalfox.com> escribi�:
La que yo te he enviado, captura la imagen de un formulario (desde donde se debe ejecutar, no desde un PRG)

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing
� �loBmp = .Bitmap.FromScreen(Thisform) �
� �loBmp.Save("C:\Imagenes\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


�Que sistema operativo usas? Si es Vista o Seven, crea una carpeta nueva c:\Imagenes\ y alli intenta guardar, quizas UAC no te permita escribir en la carpeta ra�z.

Luis Mar�a Guay�n

Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

�


El 11/11/2010 06:36, Marcelo Barberis escribi�:
Estimados amigos
estuve viendo la funcion con gdiplusX que me pasaron para grabar una imgen de un form en diferentes formatos para luego si poder imprimirlo y tener a la mano en otra aplicacion, bueno yo le hice alguna modificaciones a la que me enviaron y nada, la que me enviaron la que ven abajo se ejecuta y no pasa nada, reviso en algun disco si esta la imagen y nada y entonces lo modifique alguito para ver y nada, bueno esto hice:

System.App
WITH _SCREEN.System.Drawing


�� LOCAL myBitmap AS xfcBitmap�
���*** Crear un objeto Bitmap
�� myBitmap = .Bitmap.New(GETPICT())�
���*** Grabar el bitmap en diferentes formatos
�� myBitmap.Save(�c:\MyPNG.png�, .Imaging.ImageFormat.Png)
�� myBitmap.Save(�c:\MyBMP.bmp�, .Imaging.ImageFormat.Bmp)
�� myBitmap.Save(�c:\MyTIFF.tif�, .Imaging.ImageFormat.Tiff)
�� myBitmap.Save(�c:\MyJPEG.jpg�, .Imaging.ImageFormat.Jpeg)

�� myBitmap.Save(�c:\MyGIF.gif�, .Imaging.ImageFormat.Gif)
ENDWITH



El 6 de noviembre de 2010 08:16, Luis Maria Guayan <luis...@portalfox.com> escribi�:
Con la clase GDIPlusX eso es f�cil.

Mira este c�digo de Cesar Chalom utilizando la Clase GDIPlusX

Do System.App
local loBmp as xfcBitmap
With _Screen.System.Drawing

� �loBmp = .Bitmap.FromScreen(Thisform) �

� �loBmp.Save("C:\ImagenCapturada.Png", .Imaging.ImageFormat.Png)
EndWith


La �ltima versi�n (1.20) de GDIPlusX la puedes descargar de http://vfpx.codeplex.com/wikipage?title=GDIPlusX


Luis Mar�a Guay�n

Tucum�n, Argentina


_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

�


El 06/11/2010 04:54, Marcelo Barberis escribi�:
Este codigo lo utilizo para imprimir la pantalla capturada de un form, ahora a este codigo se le puede modificar para que me capture la imagen y me de la opcion de guardarlo como una imagen, como por ejemplo en jpg o png o bmp o tif permitiendome seleccionar donde guardarlo?
Este es el codigo

z = SET("PRINTER", 2)
v = MESSAGEBOX("Este comando Imprimir� el contenido capturado de esta Ventana en la Impresora Predeterminada ";
��� +CHR(13)+ z +CHR(13)+ "Continuar S/N", 036, "Imprimir Ventana")
IF v==6
Reply all
Reply to author
Forward
0 new messages