很简单一句话,窗体上面两个TImage,Image2已经加载好一个图像,然后
Image1.Picture.Assign(Image2.Picture.Bitmap); //就这一句,设个定时器,循环执行,一段时间之后,程序就会异常
类似资源耗尽,进程僵死求教如何解决?
调用Image1.FreeImage也无效

解决方案 »

  1.   

    用个TMemoryStream做中转,一个savetostream,另一个用loadfromstream
      

  2.   

    能否详细解释下为什么会出现这种情况的呢?难道这种Assign的用法就是不允许的?
    为什么中转一下就能可以了的呢?
      

  3.   

    位图还有很多资源,大概没有释放,具体你看看VCL源代码吧。
      

  4.   

    测试了一下,没出现你说的情况啊
    内存占用没变化,gdi对象也没变化
      

  5.   

    我设定的定时器是50ms,启动后大概运行10-20分钟后必现,请各位大侠再试试的啊。procedure TForm1.BitMapLoadSource(BitMap:TBitmap);
    begin
      BitMap.ReleaseHandle;
      Bitmap.Assign(self.Image2.Picture.Bitmap);
      BitMap.FreeImage;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     BitMapLoadSource(self.Image1.Picture.Bitmap);
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      self.Timer1.Enabled:=true;
    end;
      

  6.   

    采用楼上的建议,使用MemoryStream中转,还是不行
    procedure TForm1.NewBitMapLoadSource(BitMap:TBitmap);
    var
    stream:TMemorystream;
    begin
      BitMap.ReleaseHandle;
      stream:=TMemoryStream.Create;
      self.Image2.Picture.Bitmap.SaveToStream(stream);
      stream.Position:=0;
      BitMap.LoadFromStream(stream);
      stream.Free;
    end;
      

  7.   

    procedure TForm1.NewBitMapLoadSource(var BitMap:TBitmap); //这里加var 试试
    var 
    stream:TMemorystream; 
    begin 
      BitMap.ReleaseHandle; 
      stream:=TMemoryStream.Create; 
      self.Image2.Picture.Bitmap.SaveToStream(stream); 
      stream.Position:=0; 
      BitMap.LoadFromStream(stream); 
      stream.Free; 
    end;
      

  8.   

    加上va是没有道理是,Delphi Pascal对于对象参数TBitMap本来就是一个引用传递进去
    还请哪位高手进来看下,给我一个解释,难道这是VCL库的Bug?
      

  9.   

    刚在网上找了半天,确实TBitmap Assign函数的有bug,资源泄漏
    http://qc.embarcadero.com/wc/qcmain.aspx?d=2511我晕死,那我如何才能完成复制呢?还是得请教