M
michael.ma
Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个线程中的主方法,其作用是把一个jpg文件缩小为原来的一半,
循环共执行100次;
为什么程序运行时虚拟内存不断的增长,造成泄漏?
如果把Lock和UnLock方法去掉,则鼠标在主窗体上移动时则报错:out of
resorce,但这个线程只是在主线程中创建,并没有和主线程交互,为什么
会报错?
问题可能出现在StretchDraw这个方法上,
有更好的转图的方法吗?blt?请大家指教。
procedure a.Execute;
var
BmpSrc,BmpMid: TBitMap;
JpgDst: TJpegImage;
w, h, i: integer;
begin
self.FreeOnTerminate := true;
for i := 1 to 100do
begin
BmpSrc := TBitMap.Create;
BmpMid:=TBitMap.Create ;
JpgDst := TJpegImage.Create;
try
JpgDst.LoadFromFile('c:/bak/a.jpg');
BmpSrc.Assign(JpgDst);
w := BmpSrc.Width div 2;
h := BmpSrc.Height div 2;
BmpMid.Width :=w;BmpMid.Height :=h;
BmpMid.Canvas.Lock ;
BmpMid.Canvas.StretchDraw(Rect(0, 0, w, h), BmpSrc);
BmpMid.Canvas.Unlock ;
JpgDst.Assign(BmpMid);
JpgDst.SaveToFile('c:/bak/' + inttostr(i) + '.jpg');
finally
Bmpsrc.Free;
BmpMid.Free ;
JpgDst.Free;
end;
sleep(200);
end;
end;
循环共执行100次;
为什么程序运行时虚拟内存不断的增长,造成泄漏?
如果把Lock和UnLock方法去掉,则鼠标在主窗体上移动时则报错:out of
resorce,但这个线程只是在主线程中创建,并没有和主线程交互,为什么
会报错?
问题可能出现在StretchDraw这个方法上,
有更好的转图的方法吗?blt?请大家指教。
procedure a.Execute;
var
BmpSrc,BmpMid: TBitMap;
JpgDst: TJpegImage;
w, h, i: integer;
begin
self.FreeOnTerminate := true;
for i := 1 to 100do
begin
BmpSrc := TBitMap.Create;
BmpMid:=TBitMap.Create ;
JpgDst := TJpegImage.Create;
try
JpgDst.LoadFromFile('c:/bak/a.jpg');
BmpSrc.Assign(JpgDst);
w := BmpSrc.Width div 2;
h := BmpSrc.Height div 2;
BmpMid.Width :=w;BmpMid.Height :=h;
BmpMid.Canvas.Lock ;
BmpMid.Canvas.StretchDraw(Rect(0, 0, w, h), BmpSrc);
BmpMid.Canvas.Unlock ;
JpgDst.Assign(BmpMid);
JpgDst.SaveToFile('c:/bak/' + inttostr(i) + '.jpg');
finally
Bmpsrc.Free;
BmpMid.Free ;
JpgDst.Free;
end;
sleep(200);
end;
end;