martes, 31 de marzo de 2009

C++ Builder: Capturar el contenido de un form como una imagen

Para hacer una captura del contenido de un form (junto con todos sus botones y demás), tenemos la siguiente función

Código:
void GuardarImagenDelControl(TWinControl *Control, AnsiString FileName)
{
HDC DC;
Graphics::TBitmap *BitmpPrueba = new Graphics::TBitmap();
try{
BitmpPrueba->Width = Control->Width;
BitmpPrueba->Height = Control->Height;


DC = GetWindowDC(Control->Handle);
BitBlt(BitmpPrueba->Canvas->Handle, 0, 0, Control->Width, Control->Height, DC, 0, 0, SRCCOPY);
ReleaseDC(Control->Handle, DC);
BitmpPrueba->SaveToFile(FileName);
}
__finally{
delete BitmpPrueba;
}
}

Esa función la agregamos a nuestro programa y , por ejemplo, podemos poner un  botón con el siguiente código en su evento OnClick:

Código:
GuardarImagenDelControl(Form1,"c:\\prueba.bmp");
Aquí, Form1 es el nombre de tu formulario (puse Form1 porque ese nombre le pone por default Builder cuando creas un nuevo proyecto) y la ruta que viene ahí la puedes cambiar por la que tu quieras, es donde se va a guardar la imagen bmp.

Ejecuta el programa y ve su funcionamiento.

Nota: por como esta definida la función GuardarImagenDelControl,  puede hacerse una captura de cualquier objeto u otro formulario en nuestro proyecto.

2 comentarios:

  1. buena respuesta, fonciona muy bien en builder 5.0

    ResponderEliminar
  2. tu sabrás como se puede hacer para manejar un dispositivo de captura? ejemplo la camara web de tal manera que la aplicacion pueda obtener imagenes por ese medio...

    ResponderEliminar