https://foro.gambas-es.org/viewtopic.php?f=1&t=3072&p=17377#p17377
-----------------------------------
jguardon
Miercoles, 17 Abril 2013, 19:18

Re: ¿como Capturar Una Zona En Un Drawingarea, Y Guardarla En Un Archivo De Imagen .png?
-----------------------------------
Hola

Hay dos formas, la primera es la chapucera y consiste en usar la función .Grab() del control. Pero no creo que sea la mejor, porque guarda todo lo que haya en las coordenadas del control, incluyendo ventanas que pudieras tener encima.

La segunda, y creo que la única, es crear una función que vuelva a dibujar el drawingarea sobre un objeto Image y hagas .Clip en en trozo de imagen que desees guardar. Eso no es más que obtener unas coordenadas relativas a las dimensiones de la imagen para "recortar" ese trozo. Después grabas a un fichero y listo.

Te dejo un código que hice en mi programa hace tiempo con gambas2, que creo que puede servir para entender mejor el asunto.

 https://dfhlog.googlecode.com/svn/branches/dfhlog1.1/FLoc.class

Abajo del todo, la función savePic prepara la imagen para guardarla. Hay que volver a dibujar todo, eso está claro, pero si usas el evento Draw y divides el código en funciones que realicen los cálculos y los dibujos, luego sólo tienes que llamarlas desde donde quieras. Lo que sí es cierto es que en la función de guardado no se ha usado el evento Draw, porque no estoy dibujando en el drawingarea, sino en un objeto picture. 

En el ejemplo que te he puesto, el drawing area está dentro de un control scrollviev, porque la imagen era muy grande, y realmente se dibuja sólo la parte visible. Hay dos métodos que usan la función, uno para guardar la parte visible de la imagen, delimitada por las dimensiones actuales del scrollview y otra que guarda la imagen entera. Es el argumento "whole" que le paso a la función. 

En fin, mira el código a ver si te sirve...

Saludos


