首页 新闻 会员 周边 捐助

图片中打字!!

0
悬赏园豆:100 [已关闭问题]


最近做图片处理时遇到一难题! 将单张图片顶部加入文字,代码已经实现,可问题出来!运行一段时间后,内存就一直涨,直到出现"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;

乡下人的主页 乡下人 | 初学一级 | 园豆:105
提问于:2009-09-01 12:37
< >
分享
其他回答(1)
0

大概估计是资源一直占用没有释放所致,你的代码是delphi.net?

代码乱了 | 园豆:213 (菜鸟二级) | 2009-09-01 18:15
用的是Delphi7.0 写的代码! 麻烦各位帮解决解决啊
支持(0) 反对(0) 乡下人 | 园豆:105 (初学一级) | 2009-09-02 10:41
0

TBitmap的Canvas操作不是线程安全;是否有多线程处理的情况。

jp1是否也要lock操作?

winzheng | 园豆:8797 (大侠五级) | 2009-09-02 09:57
jp1如何lock呢? 用的是线程进行处理。但内存不停上涨。郁闷呢
支持(0) 反对(0) 乡下人 | 园豆:105 (初学一级) | 2009-09-02 10:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册