Ver Mensaje Individual
  #1  
Antiguo 26-12-2010
Avatar de Marck Silencer
Marck Silencer Marck Silencer is offline
Registrado
NULL
 
Registrado: dic 2010
Posts: 7
Reputación: 0
Marck Silencer Va por buen camino
Question Liberación de memoria de Tbitmap

Hola! a todos los miembros de este genial foro!! Soy nuevo en el Foro espero también ayudar en lo que se pueda por aqui.

Mientras tanto tengo un problema que me ah traido de cabeza bastantes horas y aún no eh podido resolver. Ya eh buscado por todas partes e incluso Post de éste mismo foro me han servido para ir avanzando con mi programa pero aún estoy atorado .

Una breve descripción de lo que busco con el programa...Requiero estar constantemente scaneando los pixeles una determinada área de la pantalla para obtener el color predominante en dicha área para despues seguir con más codigo utilizando ese color predominante. Hasta el momento eh conseguido el color de un solo pixel en la pantalla y de momento lo muestro cambiando el color de un panel... Tódo esto lo hago en un timer ajustado a 10 ms.....

Funciona correctamente va cambiando el color de panel según que color pase por ese pixel que estoy escaneando, el problema es que despues de un tiempo de estar escaneando y mostrandolo en la propiedad de color del panel, Se detiene la ejecución mostrandome un error "EoutOfResources" y realizando antes unas modicaciones al código me salía otro error acerca de que el Tcanvas no puede "dibujar".....

Creoo que mi error está en el modo de scanear oh en el modo de liberar la memoria o los handles que usal el TBitmap.....!! Ya eh intentando demaciadas cosas sin lograr que pueda escanear sin tiempo definido ese pixel..... Creo yo que debe de existir una forma en la cual se haga el escaneo -> Se liberen los recursos utilizados -> Volver a escanear con esos mismos recursos........así no pasaría esto!( segun entiendo claro) xD

Aqui pongo el código que estoy utilizando.

Código Delphi [-]
implementation
var
myColor:TColor;
Pxl  : TBitmap;
{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Pxl:=TBitmap.Create;
Pxl.Width:=1;
Pxl.Height:=1;
Pxl.Dormant;
 Try
BitBlt(Pxl.Canvas.Handle,0,0,1,1,GetDC(0),123,123,SRCCOPY);
myColor:=Pxl.Canvas.Pixels[0,0];
panel1.Color:= myColor;
 finally
 Pxl.FreeImage;
 Pxl.ReleaseHandle;
 Pxl.ReleaseMaskHandle;
 Pxl.Free;

 end;

end;

end.

Espero alguien pueda hecharme la mano con este problemilla!
Saludos..
Marck
Responder Con Cita