PDA

Ver la Versión Completa : Liberar memoria del HDC


joecool
16-05-2003, 23:50:15
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

delphi.com.ar
17-05-2003, 00:22:54
Cuando no necesites mas del Bitmap, tenés que hacer un DeleteObject....

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;
...

PD: Acordate que lo que te pasé es un código resumido, porque lo único que querías saber, es como asignar un HBITMAP a un TBitmap.

joecool
17-05-2003, 01:28:51
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!!.