首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GPUImageFilter与CIFilter (GPUImage的内存问题)

GPUImageFilter与CIFilter (GPUImage的内存问题)
EN

Stack Overflow用户
提问于 2013-12-26 22:42:03
回答 1查看 923关注 0票数 0

GPUImage有没有内存问题?下面是两个不同的渐晕滤镜效果代码。第一个(苹果的CI过滤器)使用19MB内存,而GPUImage使用超过75MB内存。我的代码出了什么问题?

使用CIFilter的Vignette滤镜

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CIImage *ciImage = [[CIImage alloc] initWithImage:image];
CIFilter *filter = [CIFilter filterWithName:@"CIVignetteEffect" keysAndValues:kCIInputImageKey, ciImage, nil];

CIContext *context = [CIContext contextWithOptions:nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];

UIImage *result = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

return result;

下面是GPUImage版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GPUImageFilter * f = [[GPUImageVignetteFilter alloc] init];
UIImage *result = [f imageByFilteringImage:image];

return result;

我在我的项目中使用了"ARC“。你有什么想法吗?我应该怎么做才能“释放”GPUImage过滤器内存?

EN

回答 1

Stack Overflow用户

发布于 2014-01-03 22:42:13

对于上述代码中的GPUImage方法,内存中将简短地存在图像的四个副本:原始UIImage及其字节、该图像在图形处理器上被上传到的纹理、过滤操作的结果以及作为该操作的结果而创建的UIImage及其字节。

上面使用的方便方法可能很简单,但它们在减少内存压力方面并不是最好的。相反,我会尝试如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image smoothlyScaleOutput:NO];
GPUImageVignetteFilter *vignetteFilter = [[GPUImageVignetteFilter alloc] init];
[stillImageSource addTarget:vignetteFilter];
[stillImageSource prepareForImageCapture];
[stillImageSource processImage];
UIImage *result = [vignetteFilter imageFromCurrentlyProcessedOutput];

根据您的原始UIImage是如何创建的,您可能希望在创建原始UIImage的同时,将其中的第一行包装在@autoreleasepool中。第一行之后不再需要原始UIImage,因此在任何给定时间,内存中最多应该有两个图像。

-prepareForImageCapture位是一种优化,可使由此返回的UIImage与过滤器的输出纹理共享内存映射。这消除了对最后一个图像副本的需要,但它确实会将过滤器锁定到UIImage,并且如果您尝试重用该过滤器或UIImage,可能会导致奇怪的行为。我也不能完全确定当过滤器在其内存映射的UIImage之前被释放时,是否所有的内存都被释放了,所以在该方法的末尾将图像编码为JPEG或PNG,并且只传递该图像的NSData表示可能会更安全。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20792216

复制
相关文章
Visual C++ 中的重大更改
https://technet.microsoft.com/zh-cn/learning/bb531344.aspx
用户7886150
2021/02/13
4.8K0
Visual C++ 中的重大更改
https://technet.microsoft.com/zh-cn/learning/bb531344.aspx
用户7886150
2021/02/11
5.3K0
C++ OpenCV在Visual Studio中的配置
  本文介绍在Visual Studio 2022中配置、编译C++计算机视觉库OpenCV的方法(再介绍一次,上次忘记设置原创了)。
疯狂学习GIS
2023/06/26
1.2K0
C++ OpenCV在Visual Studio中的配置
C++矩阵库Armadillo在Visual Studio中的配置
  本文介绍在Visual Studio软件中配置C++ 环境下线性代数运算库Armadillo的方法。
疯狂学习GIS
2022/12/18
3.6K0
C++矩阵库Armadillo在Visual Studio中的配置
Visual Studio配置C++的GDAL库!
  本文介绍在Visual Studio软件中配置、编译C++环境下GDAL库、SQLite环境与PROJ库的详细方法。
疯狂学习GIS
2023/06/26
1.3K6
Visual Studio配置C++的GDAL库!
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http:/
Python在下载包的过程中遇到 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools 提供两个解决方案: 解决方案一: 环境状态:win10,python_3.6.1,64位。 在windows下,在dos中运行pip install Scrapy报错:
学到老
2018/03/19
2.4K0
配置C++版本的matplotlibcpp:Visual Studio
  本文介绍在Visual Studio软件中配置、编译C++环境下matplotlibcpp库的详细方法。
疯狂学习GIS
2023/10/24
1.1K0
配置C++版本的matplotlibcpp:Visual Studio
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http:/
2018博客之星评选,如果喜欢我的文章,请投我一票,编号:No.009 支持连接 ,万分感谢!!!
学到老
2019/02/14
5.4K0
NodeJs —— 在Visual Studio中开发C++插件之环境配置
     最新版地址:  https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/
ranky
2018/08/20
2.8K0
NodeJs —— 在Visual Studio中开发C++插件之环境配置
error: Microsoft Visual C++ 14.0 is required
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
1.1K0
error: Microsoft Visual C++ 14.0 is required
visual c++ 6.0运行不了_visual c++2010无法启动程序
php5.3、5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行。
全栈程序员站长
2022/09/22
1.1K0
visual c++ 6.0运行不了_visual c++2010无法启动程序
微软发布新的Visual C++代码优化器
微软在5月4日发布了新的高级代码优化器,服务于Visual C++的后端编译器。提高了代码性能,可以压缩代码体积,将编译器带入了一个新的境界。 Visual C++的团队在博客上称,这将会是发布的第一个版本,鼓励大家进行尝试,提出建议和反馈。新优化器会跟随Visual Studio Update3发布,目前,这个更新版本暂时不支持新编译器,只是为测试用。 新优化框架的目的是,希望能进行更多深层次的优化,比如利用更多的编译信息和现代编译器的开发。过去老旧的编译器,过时的设计让高级的优化和速度优化变得困难。作为
CSDN技术头条
2018/02/12
6530
visual C++ 项目和解决方案的区别
项目是构成某个程序的全部组件的容器,该程序可能是控制台程序、基于窗口的程序或某种别的程序。程序通常由一个或多个包含用户代码的源文件,可能还要加上包含其它辅助数据的文件组成。某个项目的所有文件都存储在相应的项目文件夹中,关于项目的详细信息存储在一个扩展名为.vcproj的xml文件中,该文件同样存储在相应的项目文件夹中。项目文件夹还包括其它文件夹,它们用来存储编译及链接项目时所产生的输出。
全栈程序员站长
2022/07/15
1.5K0
How to use Google Test for C++ in Visual Studio
In Visual Studio 2017 version 15.5 and later, Google Test is integrated into the Visual Studio IDE as a default component of the Desktop Develoment with C++ workload. To verify that it is installed on your machine, open the Visual Studio Installer and find Google Test under the list of workload components:
战神伽罗
2019/07/24
8320
How to use Google Test for C++ in Visual Studio
Visual Studio 2010 C++ 工程文件解读
在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义;
用户3519280
2023/07/08
3870
Visual Studio 配置 Halcon C++ 运行环境
Halcon 代码经常需要融入 VS 的环境中运行,本文记录在 VS C++ 代码中运行 Halcon 的环境配置。 安装 Halcon 首先需要 安装好 Halcon 此时环境变量中应该有 HALCONARCH, HALCONEXAMPLES, HALCONIMAGES,HALCONROOT VS 环境配置 在 VS 中运行 Halcon 代码最关键需要解决的就是环境配置问题 我们按照一个官方示例中描述的内容配置 Halcon 环境 在 VS 中新建空的 C++ 工程 选择
为为为什么
2022/11/07
2.9K0
Visual Studio 配置 Halcon C++ 运行环境
Visual Studio Code C++配置文件
以下三个文件放在 项目下 .vscode 文件夹中,内容从网络收集,经自己实践添加修改以备忘
Michael阿明
2022/01/07
1.2K0
uni-app中更改复选框的默认样式
记一下uni-app复选框默认样式问题 /* #ifdef H5 */ uni-checkbox .uni-checkbox-input { border-radius: 50% !important; color: #ffffff !important; } uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked { border: none !important; background: #3d7eff; border
薛定喵君
2019/11/05
6.8K0
点击加载更多

相似问题

Drupal中类似Facebook的状态消息框

20

类似Facebook的框不显示新闻馈送

10

创建facebook类似框

11

创建一个类似facebook的搜索框

10

如何在Facebook状态更新框(textarea)中突出显示好友名称?

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文