最近做图片处理时遇到一难题! 将单张图片顶部加入文字,代码已经实现,可问题出来!运行一段时间后,内存就一直涨,直到出现"Out of system resources"错误
图片为:3744 * 1440 大小:377KB
该如何处理这图片如不让内存涨?还有处理速度?
function DrawToPicText(strFarImg, strFont, strSave,
sFlip, sImageNum: string): Boolean;
var
jp1: TJPEGImage;
bmp_t,bmp: TBitmap;
begin
jp1 := nil; bmp_t := nil; bmp := nil;
jp1 := TJPEGImage.Create;
bmp := TBitmap.Create;
bmp_t := TBitmap.Create;
try
jp1.LoadFromFile(strFarImg);
try
bmp.Canvas.Lock;
bmp.PixelFormat := pf24bit;
bmp_t.Assign(jp1); // 照片一
bmp.Width := bmp_t.Width;
bmp.Height := bmp_t.Height + 32;
bmp.Transparent := True;
bmp.Canvas.Font.Color :=clRed;
bmp.Canvas.Font.Size := 18;
bmp.Canvas.Font.Name := 'System';
bmp.Canvas.Draw(0, 32, bmp_t);
bmp.Canvas.TextOut(0,0,strFont);
jp1.Assign(bmp);
// sleep(200);
if not fileexists(strsave) then jp1.SaveToFile(strSave);
bmp.Canvas.Unlock;
freeandnil(bmp);
freeandnil(bmp_t);
except
on E:Exception Do
FrmMain.ErrLog('处理出错: <DrawToPicTextAndSave> '+ e.Message);
end;
finally
//jp1.Free;
end;
freeandnil(jp1);
Result := True;
end;
大概估计是资源一直占用没有释放所致,你的代码是delphi.net?
TBitmap的Canvas操作不是线程安全;是否有多线程处理的情况。
jp1是否也要lock操作?