Memory Leak - Richedit
Memory Leak - Richedit
Hola,
Estaba probando este ejecutable https://github.com/FiveTechSoft/FWH_too ... er/pim.zip y veo que si en el control de edicion que creo que es un richedit, pego una imagen hay una fuga de memoria.
Realmente para mi no tiene demasiada importancia. Pero por si fuera de interés para alguien
Saludos
Estaba probando este ejecutable https://github.com/FiveTechSoft/FWH_too ... er/pim.zip y veo que si en el control de edicion que creo que es un richedit, pego una imagen hay una fuga de memoria.
Realmente para mi no tiene demasiada importancia. Pero por si fuera de interés para alguien
Saludos
Re: Memory Leak - Richedit
Cómo has detectado la fuga que comentas?
Lo digo para usar los mismos criterios y herramientas
Lo digo para usar los mismos criterios y herramientas
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Memory Leak - Richedit
Hola Cristóbal,
Con el administrador de tareas, en la columna de objetos GDI
Salu2
Con el administrador de tareas, en la columna de objetos GDI
Salu2
Re: Memory Leak - Richedit
Muy buenas señor
Lo imaginaba pero quería asegurarme
Gracias
Lo imaginaba pero quería asegurarme
Gracias
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Memory Leak - Richedit
Nunca he usado el valgrind. No sé como se utilizaria.
El Process Explorer no aporta mucho en el tema GDI (o eso creo)
El Task Manager de luxe tampoco... Quizá las versiones más modernas.. no sé..
¿ Utilizas tu algún inspector para detectar las fugas de memoria ?
El Process Explorer no aporta mucho en el tema GDI (o eso creo)
El Task Manager de luxe tampoco... Quizá las versiones más modernas.. no sé..
¿ Utilizas tu algún inspector para detectar las fugas de memoria ?
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Memory Leak - Richedit
Paco,
Has probado a usar el propio detector de pérdida de recursos que incorpora FWH ?
http://wiki.fivetechsoft.com/doku.php?i ... etresdebug
Has probado a usar el propio detector de pérdida de recursos que incorpora FWH ?
http://wiki.fivetechsoft.com/doku.php?i ... etresdebug
Re: Memory Leak - Richedit
Hola Antonio,
No lo he probado... pero sospecho que para el caso del enunciado no serviria...
Los objetos richedit si son eliminados pero no los recursos que consumieron con las imagenes....
Pero ciertamente no sé bien qué está pasando... Pero ciertamente el ejemplo si tiene una fuga por la cañería y es más grande cuanto más grande es la imagen que se le pega
Salu2
No lo he probado... pero sospecho que para el caso del enunciado no serviria...
Los objetos richedit si son eliminados pero no los recursos que consumieron con las imagenes....
Pero ciertamente no sé bien qué está pasando... Pero ciertamente el ejemplo si tiene una fuga por la cañería y es más grande cuanto más grande es la imagen que se le pega
Salu2
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Memory Leak - Richedit
Paco,
El propio sistema de FWH también debería detectar la no liberación de esas imágenes y reportarlas
Te ruego que lo pruebes usándo esas funciones propias de FWH y nos comentes el resultado
Gracias
El propio sistema de FWH también debería detectar la no liberación de esas imágenes y reportarlas
Te ruego que lo pruebes usándo esas funciones propias de FWH y nos comentes el resultado
Gracias
Re: Memory Leak - Richedit
Antonio, he hecho la SetResDebug() en una aplicación que desarrolle para un cliente donde incorporo unas imágenes y las mismas las pueden modificar y luego guardarlas en una tabla de MySQL
Como desconozco como interpretar los resultados de SetResDebug(), copio el mismo acá para que me puedas indicar si estoy teniendo problemas con la liberación de estas imágenes:
* Corte el contenido porque tiene mas líneas.
Si estoy teniendo problemas con liberación de estas imágenes de la memoria, como se corrige el problema?
Saludos cordiales
Carlos
Como desconozco como interpretar los resultados de SetResDebug(), copio el mismo acá para que me puedas indicar si estoy teniendo problemas con la liberación de estas imágenes:
Code: Select all
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BRUSH,-1139798402,TCONTROL:SETCOLOR(2770)->TBTNBMP:SETCOLOR(2084)->TBTNBMP:NEWBAR(579)->FUNSISMAIN:ACTIVAR(1224)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,1040519000,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8630)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,402984832,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8631)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-804974665,TXIMAGE:COPYTOCLIPBOARD(914)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,151326670,TIMAGE:LOADFROMCLIPBOARD(445)->GUARDARGRAFICACLINICA(9575)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,1174736808,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8630)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,1761939236,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8631)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-1459286073,TXIMAGE:COPYTOCLIPBOARD(914)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,755306396,TIMAGE:LOADFROMCLIPBOARD(445)->GUARDARGRAFICACLINICA(9575)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-1291514171,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8630)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-1912270878,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8631)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BRUSH,-2096099950,AYUDACINV(5229)->(b)REPINVEN01(84)->TWINDOW:LBUTTONDOWN(2067)->TBITMAP:LBUTTONDOWN(607)->TCONTROL:HANDLEEVENT(1788)->TBITMAP:HANDLEEVENT(577)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->REPINVEN01(362)->(b)MENUMAIN(3181)->TMENU:COMMAND(1552)->TWINDOW:COMMAND(1141)->TMDIFRAME:COMMAND(272)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- ====================================================================================================
Si estoy teniendo problemas con liberación de estas imágenes de la memoria, como se corrige el problema?
Saludos cordiales
Carlos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Memory Leak - Richedit
Carlos,
Hay 10 bitmaps no liberados. Busca por "BMP," y verás desde donde se ha creado cada uno de ellos
Que control contiene a esos bitmaps ? es una barra de botones ? Puedes mostrar una imagen ?
Hay 10 bitmaps no liberados. Busca por "BMP," y verás desde donde se ha creado cada uno de ellos
Que control contiene a esos bitmaps ? es una barra de botones ? Puedes mostrar una imagen ?
Re: Memory Leak - Richedit
Antonio, gracias por responder.
Estoy utilizando un control xImage en una ventana:
Luego, según las modificaciones que hagan a la imagen, la copio al portatapeles -> oImage:CopyToClipBoard( .T. )
Par luego guardarla a disco:
Creo que el problema esta en que las estoy guardando al portapapeles?
Saludos cordiales
Carlos
Estoy utilizando un control xImage en una ventana:
Code: Select all
@ oWnd:oBar:nHeight, 250 XIMAGE oImage SIZE oWnd:nWidth -30, -oWnd:oMsgBar:nHeight
Luego, según las modificaciones que hagan a la imagen, la copio al portatapeles -> oImage:CopyToClipBoard( .T. )
Par luego guardarla a disco:
Code: Select all
oImage2:LoadFromClipboard()
oImage2:SaveImage( cImage, 2, 100 )
Saludos cordiales
Carlos
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Memory Leak - Richedit
I think this is what you are doing:
oImage is TXImage control.
You are copying the image as viewed from oImage to Clipboard.
Paste the image to oImage2, which is a TImage control.
Then saving the image using oImage2:SaveImage(...)
All this is not necessary.
We do not require the second TImage control oImage2 and also we need not use Clipboard at all.
When you want to save, just call
Note: Last parameter nQuality is required only for jpg files.
Is there any problem saving this way?
oImage is TXImage control.
You are copying the image as viewed from oImage to Clipboard.
Paste the image to oImage2, which is a TImage control.
Then saving the image using oImage2:SaveImage(...)
All this is not necessary.
We do not require the second TImage control oImage2 and also we need not use Clipboard at all.
When you want to save, just call
Code: Select all
oImage:Save( .t., "name.png" )
Is there any problem saving this way?
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Memory Leak - Richedit
Hola Rao, gracias por contestarme.
Si, yo ya había utilizado la opción que me indicas del control xImage:
Pero no funciona, no guarda la imagen.
Solo me funciona, copiando al portapales y utilizar el control Image, para guardar la imagen.
Saludos cordiales.
Carlos.
Si, yo ya había utilizado la opción que me indicas del control xImage:
Code: Select all
oImage:Save( .t., cImage )
Solo me funciona, copiando al portapales y utilizar el control Image, para guardar la imagen.
Saludos cordiales.
Carlos.
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Memory Leak - Richedit
1) Please try and let us know if this works.
2) We would like to check again why oImage:Save( .t., cImage ) is not working.
3) I very much liked your program. If you do not mind sharing your full program with me, I would like to test and improve TXImage class to save the changes properly.
My email is:
nageswaragunupudi [at] gmail [dot] com.
Thank you.
Code: Select all
oImage:CopyToClipBoard( .t. )
FW_SaveImage( nil, cFileName )
3) I very much liked your program. If you do not mind sharing your full program with me, I would like to test and improve TXImage class to save the changes properly.
My email is:
nageswaragunupudi [at] gmail [dot] com.
Thank you.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Memory Leak - Richedit
Hola Rao.
Disculpándome por el atraso en contestar, tuve que salir de viaje.
Te contesto a cada punto que me escribieras:
1) No funciona la opción FW_SaveImage( nil, cFileName ), no guarda la imagen.
2) Gracias por el apoyo.
3) Ya te envié por correo el programa para que puedas ver como lo estoy haciendo actualmente. (Si alguien mas quiere tener este programa que me envíe su correo y se lo envío. ) ** NOTA: Este trabajo de dibujar sobre una imagen es idea de Uwe, yo solo lo adapte.
Saludos cordiales.
Carlos.
Disculpándome por el atraso en contestar, tuve que salir de viaje.
Te contesto a cada punto que me escribieras:
1) No funciona la opción FW_SaveImage( nil, cFileName ), no guarda la imagen.
2) Gracias por el apoyo.
3) Ya te envié por correo el programa para que puedas ver como lo estoy haciendo actualmente. (Si alguien mas quiere tener este programa que me envíe su correo y se lo envío. ) ** NOTA: Este trabajo de dibujar sobre una imagen es idea de Uwe, yo solo lo adapte.
Saludos cordiales.
Carlos.