每添加一张图片后,GDI对象 + 3 原因: ImageList_AddIcon(hIcon) 后没调用 DestroyIcon(hIcon)
2017-12-06 12:07
561 查看
今天无意间在【任务管理器】中发现,每添加1张图片后,应用程序的 GDI对象 + 3,添加图片后,再把所有图片删除, GDI对象数量没减少!
排查原因,发现:
GDI对象 + 3 的代码是:
但为什么,把所有添加的图片 ImageList_AddIcon(hImgLst_ListView, hIcon); 删除后, GDI 对象数没有减少呢?
网上查了一下相关资料,查找到原因: CreateIconFromResourceEx() 后, 如果图标不需要使用了, 需要销毁图标: DestroyIcon();
微软api提示: https://msdn.microsoft.com/en-us/library/windows/desktop/ms648061(v=vs.85).aspx 您应该使用 CreateIconFromResourceEx 创建的图标, 调用 DestroyIcon (销毁图标)。
宏: ImageList_AddIcon() - https://msdn.microsoft.com/en-us/library/windows/desktop/bb761399(v=vs.85).aspx
根据 https://stackoverflow.com/questions/24227374/do-i-need-to-destroy-icon-after-i-added-it-to-imagelist 介绍:
hImgLst_ListView 将图像数据(hIcon)复制到其内部存储器, 它不保存图标句柄(hIcon)的记录。
排查原因,发现:
GDI对象 + 3 的代码是:
int offset = LookupIconIdFromDirectoryEx(pIcoData, TRUE, width_thumbnail, height_thumbnail, LR_DEFAULTCOLOR); if(offset != 0) //成功 { HICON ico = CreateIconFromResourceEx(pIcoData + offset, 0, TRUE, 0x30000, width_thumbnail, height_thumbnail, LR_DEFAULTCOLOR); }
但为什么,把所有添加的图片 ImageList_AddIcon(hImgLst_ListView, hIcon); 删除后, GDI 对象数没有减少呢?
网上查了一下相关资料,查找到原因: CreateIconFromResourceEx() 后, 如果图标不需要使用了, 需要销毁图标: DestroyIcon();
微软api提示: https://msdn.microsoft.com/en-us/library/windows/desktop/ms648061(v=vs.85).aspx 您应该使用 CreateIconFromResourceEx 创建的图标, 调用 DestroyIcon (销毁图标)。
宏: ImageList_AddIcon() - https://msdn.microsoft.com/en-us/library/windows/desktop/bb761399(v=vs.85).aspx
根据 https://stackoverflow.com/questions/24227374/do-i-need-to-destroy-icon-after-i-added-it-to-imagelist 介绍:
hImgLst_ListView 将图像数据(hIcon)复制到其内部存储器, 它不保存图标句柄(hIcon)的记录。
ImageList_AddIcon(hImgLst_ListView, hIcon); //添加ico格式 DestroyIcon(hIcon); /** ImageList_AddIcon() 后, 马上销毁 hIcon **/
相关文章推荐
- FIX: ImageList Class Leaks GDI Objects ImageList会造成GDI对象泄露
- 调用play的jpa查询数据时添加Transformers.ALIAS_TO_ENTITY_MAP可将结果集封装到list<map>对象里
- 在ImageList中添加图片,运行时SetKeyName报IndexOutOfRangeException
- 为CheckBoxList每个项目添加一张图片
- iOS为imageView添加图片实现动画
- Swing图片ImageIcon对象到SWT图片Image对象的转换
- Delphi 如何在Image图片上添加文字
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- stringgrid 显示imagelist里面的图片
- XtraTreelist添加节点图片
- 加载一张图片到ImageView到底占据多少内存
- Android自定义ImageView实现在图片上添加图层效果
- Java中List调用remove时报UnsupportedOperationException的原因及解决方法
- List使用add方法添加对象问题
- 向list中添加对象时需要注意的问题
- C# WINFROM中threeview中imagelist图片有时候不显示透明的
- 在Android 中调用选择图片、视频、添加音频、录音、拍摄视频、拍照等其他的功能
- Qt模块化笔记之Qt_Quick——用QQuickImageProvider给Image组件添加图片
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- Android自定义ImageView:在图片上添加一个图层