function resizeBmp(oriBmp:TBitMap;w,h:Integer):TBitMap;
var
tmpBmp:TBitMap;
begin
tmpBmp:=TBitmap.Create;
tmpBmp.Width:=w;
tmpBmp.Height:=h;
tmpbmp.Canvas.StretchDraw(Rect(0, 0, w,h),oriBmp);
result:=tmpBmp;
//tmpBmp.free;
end;以下函数,是调整一个BMP文件的长宽,然后返回一个新的bmp。但里面有一个问题,tmpBmp如果不执行free,就造成内存不释放,如果free的话,取函数返回的结果时,就出错了。有人讲,把它写成
procedure resizeBmp(var oriBmp:TBitMap;w,h:Integer):TBitMap; 只传oriBmp的地址进来,但是,如果我传进来的是Form1.image1.bitMap,这样就把image1的图象改变了。当然,我可以实例化一个BitMap对象,然后传进来,然而,这不是简洁的办法。请教一下各位,有没有更好的方案?谢谢。
var
tmpBmp:TBitMap;
begin
tmpBmp:=TBitmap.Create;
tmpBmp.Width:=w;
tmpBmp.Height:=h;
tmpbmp.Canvas.StretchDraw(Rect(0, 0, w,h),oriBmp);
result:=tmpBmp;
//tmpBmp.free;
end;以下函数,是调整一个BMP文件的长宽,然后返回一个新的bmp。但里面有一个问题,tmpBmp如果不执行free,就造成内存不释放,如果free的话,取函数返回的结果时,就出错了。有人讲,把它写成
procedure resizeBmp(var oriBmp:TBitMap;w,h:Integer):TBitMap; 只传oriBmp的地址进来,但是,如果我传进来的是Form1.image1.bitMap,这样就把image1的图象改变了。当然,我可以实例化一个BitMap对象,然后传进来,然而,这不是简洁的办法。请教一下各位,有没有更好的方案?谢谢。
解决方案 »
- 关于ADOQuery的Append的问题
- 抢分啦!~~~~~~~~~~~~~~
- 如何将用户的鼠标输入和键盘输入进行记录
- 小波变换重构失真的问题
- try....finally的问题
- 关于delphi的相对路径问题(在线等。。。。。。。。。。。好着急)
- 拨号后从远程win2000服务器上下载文件
- 我有个DBEDIT,想显示日期,但不想自己手工输入,想点击框右边的一钮马上显示象个月历表样的日期,很方便的选择,不知各位大侠,能否教小
- 用ADO如何把快速把SQLSERVER数据批量写入ACCESS中?
- 有什么网站是专门的控件下载和注册的啊?
- 怎样控制fastreport的预览窗口的按钮
- 在饼图或柱图上当鼠标移动时如何显示相应的内容?
B := A;并不表示B又开辟了新的内存实例
A、B都是指针,内存实例是通过TBitmap.Create得到的
B := A;只是将B的指针同A一样指向TBitmap.Create开辟的内存实例
B.Free; 其实就等于A.Free; 它们操作的是同一内存实例Image1.Picture.Bitmap作为实参或形参都是一样会改变图像
Image1.Picture.Bitmap只是一个指针,你函数里控制的是内存实例
tmpBmp:TBitMap;
tmpBmp:=TBitmap.Create;
function resizeBmp(oriBmp,tmpBmp:TBitMap;w,h:Integer):TBitMap;
begin
tmpBmp.Width:=w;
tmpBmp.Height:=h;
tmpbmp.Canvas.StretchDraw(Rect(0, 0, w,h),oriBmp);
result:=tmpBmp;
end;
tmpBmp.free;