Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-05-2003
joecool joecool is offline
Miembro
 
Registrado: may 2003
Ubicación: Sant Boi - Barcelona
Posts: 15
Poder: 0
joecool Va por buen camino
Cool 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í.
Responder Con Cita
  #2  
Antiguo 16-05-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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.
__________________
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.
Responder Con Cita
  #3  
Antiguo 17-05-2003
joecool joecool is offline
Miembro
 
Registrado: may 2003
Ubicación: Sant Boi - Barcelona
Posts: 15
Poder: 0
joecool Va por buen camino
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í.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:21:53.


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
Copyright 1996-2007 Club Delphi