- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个从电影中去除帧的程序。这在 iOS 7 上的 Xcode 5.0 模拟器中。我试图放入这个数组中的对象数量是 447。(似乎没有那么多)。
由于数组大小不够大导致内存泄漏,我的程序不断崩溃?? (不知道这种说法是否正确)或由于其他原因。仅对于帧数大于 350 的视频,它在 for 循环中始终失败。较少帧的视频工作正常。
只是预感这与我将大型原始帧图像存储到数组中这一事实有什么关系吗?我没有缩小框架图片?
CODE:
NSMutableArray* allFrames = [[NSMutableArray alloc] init];
// get each frame
for (int k=0; k< totalFrames; k++)
{
int timeValue = timeValuePerFrame * k;
CMTime frameTime;
frameTime.value = timeValue;
frameTime.timescale = movie.duration.timescale;
frameTime.flags = movie.duration.flags;
frameTime.epoch = movie.duration.epoch;
CMTime gotTime;
CGImageRef myRef = [generator copyCGImageAtTime:frameTime actualTime:&gotTime error:nil];
[allFrames addObject:[UIImage imageWithCGImage:myRef]];
if (gotTime.value != frameTime.value)
NSLog (@"requested %lld got %lld for k %d", frameTime.value, gotTime.value, k);
//cleanup?
CFRelease(myRef);
}
ERROR:
2013-11-03 20:18:24.746 test[42139:a0b] requested 9925 got 9921 for k 397
2013-11-03 20:18:25.122 test[42139:a0b] requested 9950 got 9946 for k 398
everseHD(42046,0xb029b000) malloc: *** mmap(size=8298496) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
2013-11-03 20:10:31.936 ReverseHD[42046:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(
0 CoreFoundation 0x020305e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x01db38b6 objc_exception_throw + 44
2 CoreFoundation 0x01fe2c3c -[__NSArrayM insertObject:atIndex:] + 844
3 CoreFoundation 0x01fe28e0 -[__NSArrayM addObject:] + 64
4 ReverseHD 0x00003131 -[v1ViewController extractImagesFromMovie] + 3089
5 libobjc.A.dylib 0x01dc5874 -[NSObject performSelector:withObject:withObject:] + 77
6 UIKit 0x00b27c8c -[UIApplication sendAction:to:from:forEvent:] + 108
7 UIKit 0x00b27c18 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
8 UIKit 0x00c1f6d9 -[UIControl sendAction:to:forEvent:] + 66
9 UIKit 0x00c1fa9c -[UIControl _sendActionsForEvents:withEvent:] + 577
10 UIKit 0x00c1e815 -[UIControl touchesBegan:withEvent:] + 254
11 UIKit 0x00b64efb -[UIWindow _sendTouchesForEvent:] + 386
12 UIKit 0x00b65d34 -[UIWindow sendEvent:] + 1232
13 UIKit 0x00b39a36 -[UIApplication sendEvent:] + 242
14 UIKit 0x00b23d9f _UIApplicationHandleEventQueue + 11421
15 CoreFoundation 0x01fb98af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
16 CoreFoundation 0x01fb923b __CFRunLoopDoSources0 + 235
17 CoreFoundation 0x01fd630e __CFRunLoopRun + 910
18 CoreFoundation 0x01fd5b33 CFRunLoopRunSpecific + 467
19 CoreFoundation 0x01fd594b CFRunLoopRunInMode + 123
20 GraphicsServices 0x032239d7 GSEventRunModal + 192
21 GraphicsServices 0x032237fe GSEventRun + 104
22 UIKit 0x00b2694b UIApplicationMain + 1225
23 ReverseHD 0x0000244d main + 141
24 libdyld.dylib 0x02975725 start + 0
)
libc++abi.dylib: terminating with uncaught exception of type NSException
最佳答案
内存泄漏 ⇒ 使用了大量内存
大量内存使用⇏内存泄漏
您正确地发布了 myRef
,您拥有它,因为它是使用 copy
方法创建的,因此您发布的代码没有任何泄漏。
您尝试存储 447 张图像只是在使用大量内存。
Doesn't seem that many
不好评价。您应该使用带有内存分配模板的 Instruments 分析应用程序并检查数组的大小,这可能会填满所有堆。
如果发现帧太大而无法存储在数组中,可以使用 AVAssetImageGenerator
的 maximumSize
属性减小生成帧的大小, 例如
generator.maximumSize = CGSizeMake(320, 180);
如文档中所述:
The default value is CGSizeZero, which specifies the asset’s unscaled dimensions.
关于ios - 数组或 CGImageRef 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760292/
我发现 CGBitmapContextCreateImage() 创建了一个图像,该图像不一定总是与 CGContextClipToMask() 兼容的掩码。但是,当使用 CGImageMaskCre
以下是在上下文中绘制 UIImage 的具体方法: UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f); [someUIImage drawI
这个问题让我很生气。我不知道出了什么问题。但是下面的代码把图像颠倒了。它实际上进行了垂直翻转,我不知道为什么。 UIFont *font = [UIFont fontWithName:fontName
我到处找遍了,还是没有结果。我正在线程中加载一些图像,由于 UIKit 不是线程安全的,我必须将图像存储为 CGImageRefs,但我不知道如何执行此操作。我以前没有玩过任何 Quartz 的东西,
我正在尝试从屏幕缓冲区中读取像素,我正在使用 CGDisplayCreateImage 创建一个 CGImageRef,但 CGImageGetWidth 的值> 和 CGImageGetByte
我正在为我的一个应用程序屏幕创建模糊图像,为此我使用以下代码 UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer
所以我知道您可以使用 UIImage 从文件中获取 CGImage... UIImage *img = [UIImage imageNamed:@"name.bmp"]; [img CGImage];
好的,使用 coregraphics,我正在构建一个图像,稍后将在 CGContextClipToMask 操作中使用。它看起来像下面这样: UIImage *eyes = [UIImage
我想创建一个 CGImageRef 并绘制指向它的点。 使用什么上下文来创建空的 CGImageRef 并能够在其上进行绘制。CGContextRef 还是 CGBitmapContextRef? 如
我正在通过CGImageSource从TIFF文件创建CGImageRef,在另一种情况下通过CGDataProvider从原始位图数据创建CGImageRef,在另一种情况下通过NSImage从PD
该项目是一个具有核心图形支持的通用 C++ 插件。我无法成功将 PicHandle 转换为 CGImageRef。从 CFDataRef 保存图像会导致图像损坏。 if(pic) {
我需要使用 CGImageSourceCreateThumbnailAtIndex(...) 创建数千个 CGImage 对象。 问题是,当使用简单的 CGDataProviderCreateWith
我正在构建一个 Iphone 应用程序,需要将 UIImage 转换为 CGImageRef。我不知道该怎么做,并且希望得到一些帮助。我没有处理图像的背景...:) 最佳答案 它就像image.CGI
MTLTexture 之间的主要区别是什么?对比 CGImageRef ?我们什么时候需要使用MTLTexture而不是 CGImageRef (反之亦然)? 我有一个应用程序(比如视频游戏),它可以
我剪掉了一段 .c 代码,但我不想将其移植到 Objective-C。这个.c文件在iPhone平台上工作,但在OS X上不行。看来编译器不知道如何处理 #import 所以它不知道CGImageR
我能知道 CGPoint 是否在 CGImageRef 内吗?或者我应该将 CGImageRef 转换成其他格式? 更新 maskcontext = CGBitmapContextCreate(cur
我正在制作一个从电影中去除帧的程序。这在 iOS 7 上的 Xcode 5.0 模拟器中。我试图放入这个数组中的对象数量是 447。(似乎没有那么多)。 由于数组大小不够大导致内存泄漏,我的程序不断崩
我做了一个上下文,然后是一个渐变。之后,我将根据上下文进行绘制。然后我从上下文中收到一个渐变图像,它是正确的,我可以在调试器中看到它。但是当我尝试获取特定值的像素颜色时,它是不正确的。感谢您的帮助,谢
我正在考虑优化从 CGImage 获取像素数据的例程。目前这样做的方式(非常低效)是创建一个新的 CGContext,将 CGImage 绘制到上下文中,然后从上下文中获取数据。 我有以下优化例程来处
我正在用核心图形绘制图像,而不是我想将它用作另一个图像的 mask ,但只是得到清晰的矩形图像。 看看我的裁剪功能有什么问题? UIGraphicsBeginImageContext(CGSi
我是一名优秀的程序员,十分优秀!