社区
Delphi
帖子详情
VCL用了这么久,却没想到被一个不是难题的难题难倒了。。。。
zwjchina
2004-11-27 08:51:39
用TImage装载了一个图片(使用LoadFromFile),请问如何释放该图片,使TImage中不显示任何图片!
...全文
415
46
打赏
收藏
VCL用了这么久,却没想到被一个不是难题的难题难倒了。。。。
用TImage装载了一个图片(使用LoadFromFile),请问如何释放该图片,使TImage中不显示任何图片!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
46 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
surpassable
2004-11-30
打赏
举报
回复
学习,学习~~~
mark~~
zwjchina
2004-11-28
打赏
举报
回复
把TImage的Picture直接设置为nil应该可以,VCL源代码已表明了一切
但是:
var
a: TBitmap;
begin
a := TBitmap.Create;
a.LoadFromFile('...');
//这里怎么释放呢?
如果用TBitmap进行loadfromFile之后,如何释放TBitmap中图片
即在TBitmap 之前TBitmap.Empty是True
LoadFromFile之后TBitmap.Empty是False
如何恢复到TBitmap是True
nongen
2004-11-28
打赏
举报
回复
指针指向NIL后,图片断链,系统会将其释放~~~~~~~~~~~~
lyguo
2004-11-28
打赏
举报
回复
学习
zzlingaaa
2004-11-28
打赏
举报
回复
使用Image.Picture下的各种图片格式都不用Create,想来Free也是自动的
huyuhua
2004-11-28
打赏
举报
回复
越搞越复杂,好象进入了C++世界
yinzhiw
2004-11-28
打赏
举报
回复
学习
Demogodyou
2004-11-28
打赏
举报
回复
置为nil 后,Delphi或操作系统会自动回收它。这些都不用你来亲自管理。
zwjchina
2004-11-28
打赏
举报
回复
如何去满足?
是否需要这样:
TBitmap.FreeImage;
TBitmap.ReleaseHandle;
TBitmap.ReleaseDIBHandle;
...
bee2518
2004-11-28
打赏
举报
回复
function TBitmap.GetEmpty;
begin
with FImage do
Result := (FHandle = 0) and (FDIBHandle = 0) and (FSaveStream = nil);
end;
满足以上条件就可以把TBitmap.Empty变成True
ehom
2004-11-28
打赏
举报
回复
楼主和楼上一些朋友的理解错了~~~
var
Bitmap: TBitmap;
这里的Bitmap是个对象
var
Picture: TPicture;
这里的Picture.Bitmap是属性
同样
Image.Picture也是属性
当然不能混为一谈~~~
把一个对象赋为nil,当然不行,这不会释放任何内存,也就是造成内存泄漏.像楼上朋友说的指针指向nil就会释放当然是不可能的.
而属性当然不一样,这里的属性赋值会调用write关键字后面跟的相应的函数,最终都是调用Graphic.SetGraphic,里面是会对相应的对象进行释放,不用担心内存泄漏
语言层面上的东西还是应该都了解透的
todouwang
2004-11-27
打赏
举报
回复
学习
aiirii
2004-11-27
打赏
举报
回复
property Picture: TPicture read FPicture write SetPicture;
以上都是摘自 VCL 源码
aiirii
2004-11-27
打赏
举报
回复
直接用
image1.Picture := nil;
就可,系统会帮你释放的,看如下源码:
procedure TImage.SetPicture(Value: TPicture);
begin
FPicture.Assign(Value);
end;
procedure TPicture.Assign(Source: TPersistent);
begin
if Source = nil then
SetGraphic(nil)
...
end;
procedure TPicture.SetGraphic(Value: TGraphic);
var
NewGraphic: TGraphic;
begin
...
FGraphic.Free; // 这里先将原来的释放,再赋值
FGraphic := NewGraphic;
Changed(Self);
...
end;
lybingyu
2004-11-27
打赏
举报
回复
var
a: TBitmap;
begin
a := TBitmap.Create;
freeandnil(a);
end
这样应没问题了
zzlingaaa
2004-11-27
打赏
举报
回复
image1.Picture := nil;
image1.Picture.Bitmap := nil;
image1.Picture.Graphic := nil;
都可以让Empty=True;
cloudtarget
2004-11-27
打赏
举报
回复
impage1.picture.graphic:=nil
zzlingaaa
2004-11-27
打赏
举报
回复
impage1.picture.graphic:=nil我一直这么用
wxjh
2004-11-27
打赏
举报
回复
Image1.Picture.Assign(nil);能实现,但是会出现内存泄露
wxjh
2004-11-27
打赏
举报
回复
用loadfile过程来夹在一个图片,对impage1.picture.graphic:=nil,这样是对的,我记得好像TPICTURE类的loadfromfile函数里面,只是在栈上创建一个临时的graphic对象,然后使用深度复制将原文件的属性复制近俩,然后将该对象直接引用传递给全局的graphic对象,所以,要释放的时候只要指针指向空就好了,不用那么复杂的,呵呵
加载更多回复(26)
易语言程序免安装版下载
静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到
一个
EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...
如何学好VC和MFC(各前辈学习方法及感受整理)(二)
接上篇) ...5. ActiveX,ATL,COM……每步骤通常需要6个月,最快也得3个月,诸位同意否? 学 VC 或 windows 编程分三 STEP:1. 只 SDK 提供的 Function 作开发,不要Object, 你会知 How to handle Mes...
《疯狂的程序员》二
11 其实也没怎么等,机会就来了,好像是机会一直在等他,等他决定不玩游戏了,来把机会拿走。 现在很多人总是抱怨:“苦恼阿,没机会阿。”好像自己就是那个才华横溢又无法横溢...
没想到
大一课多到超出了他的想像...
疯狂的程序员17
老杨很吃惊地看着绝影。他缓缓地说:“不好。一张公交卡里面有50块钱,车上贼又多,不小心掉了就全没了。我觉得还是折现好些。”绝影还算是聪明人。这就好比现在BOSS总跟你说:“小张啊,好好干,再...”这么一说
没想到
疯狂的程序员 10-20
(11) 转折点 其实也没怎么等,机会就来了,好像是机会一直在等他,等他决定不玩游戏了,来把机会拿走。 现在很多人总是抱怨:“苦恼阿,没机会阿。”好像自己就是那个才华横溢又无法横...
没想到
大一课多到超出了他...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章