FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Liberar memoria del HDC
Hola a todos.
En un código que me facilitó delphi.com.ar -------------------------------------------------------------------------------- var hBmp : HBITMAP; Bmp : TBitmap; begin ... hBmp := CreateDIBitmap( GetWindowDC(GetDesktopWindow()), ... ); Bmp := TBitmap.Create; Try Bmp.Handle := hBmp; Bmp.SaveToFile( 'c:\...' ); finally Bmp.Free; end; -------------------------------------------------------------------------------- me encontré que en cada iteración del bucle se consumían 4 Kb de memoria. La primera solución que me vino fué utilizar la función CreateDC: ---------------------------------------------------------------------- var MiDC : HDC ....... MiDC:=CreateDC('display',0,0,0) hBmp := CreateDIBitmap( MiDC, ... ); DeleteDC(MiDC) ----------------------------------------------------------------------- Espero que si alguien se encuentra con ese problema pueda encontrar la solución aquí. Un Saludo
__________________
Disclaimer (no sé cómo se traduce pero los yankis lo ponen en toas partes- Debe ser algo así como me desentiendo de...). Lo anteriormente expresado es una mera opinión y no está sujeta a garantía de ningún tipo. Vamos, que es lo que me parece, me ha funcionado o he visto/leido, pero que me funcione a mí no quiere decir que te funcione a tí. |
#2
|
||||
|
||||
Cuando no necesites mas del Bitmap, tenés que hacer un DeleteObject....
Código:
var hBmp : HBITMAP; Bmp : TBitmap; begin ... hBmp := CreateDIBitmap( GetWindowDC(GetDesktopWindow()), ... ); Try Bmp := TBitmap.Create; Try Bmp.Handle := hBmp; Bmp.SaveToFile( 'c:\...' ); finally Bmp.Free; end; finally DeleteObject(hBmp); end; ...
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 16-05-2003 a las 23:28:56. |
#3
|
|||
|
|||
Cierto. Eso es lo que me indicaste.
Voy a probar lo que me dices ahora mismo. A ver si me funciona con el resto de mi código... seguro que sí! Por cierto. Podrías orientarme cómo hacer para conseguir que ese bitmap sea independiente del DC. Me encuentro que al generarlo desde un terminal server (como la pantalla es de 256 colores) los usuarios que conectan a la red en modo local obtienen un resultado con esa profunidad de color... Penoso! Estoy intentando crearlo con CreateCompatibleBitmap y despues copiando los pixels con BitBtl. No sé si es lo correcto. Sigo en ello. Gracias de nuevo!!.
__________________
Disclaimer (no sé cómo se traduce pero los yankis lo ponen en toas partes- Debe ser algo así como me desentiendo de...). Lo anteriormente expresado es una mera opinión y no está sujeta a garantía de ningún tipo. Vamos, que es lo que me parece, me ha funcionado o he visto/leido, pero que me funcione a mí no quiere decir que te funcione a tí. |
|
|
|