Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Liberar memoria del HDC (https://www.clubdelphi.com/foros/showthread.php?t=516)

joecool 16-05-2003 22:50:15

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

delphi.com.ar 16-05-2003 23:22:54

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

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 00: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!!.


La franja horaria es GMT +2. Ahora son las 12:15:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi