【发布时间】:2013-01-18 15:44:17
【问题描述】:
我有一个从 CIImage 加载的 UIImage:
tempImage = [UIImage imageWithCIImage:ciImage];
问题是我需要将tempImage 裁剪为特定的CGRect,而我知道如何做到这一点的唯一方法是使用CGImage。
问题是在 iOS 6.0 文档中我发现了这个:
CGImageIf the UIImage object was initialized using a CIImage object, the value of the property is NULL.
A.如何从 CIImage 转换为 CGImage? 我正在使用这段代码,但我有内存泄漏(并且无法理解在哪里):
+(UIImage*)UIImageFromCIImage:(CIImage*)ciImage {
CGSize size = ciImage.extent.size;
UIGraphicsBeginImageContext(size);
CGRect rect;
rect.origin = CGPointZero;
rect.size = size;
UIImage *remImage = [UIImage imageWithCIImage:ciImage];
[remImage drawInRect:rect];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
remImage = nil;
ciImage = nil;
//
return result;
}
【问题讨论】:
-
您提到您需要 CGImage 来进行裁剪。正如 Joris Kluivers 所说,您可以通过在 CIImage 上使用 CICrop 过滤器在没有 CGImage 的情况下进行裁剪。你还有什么需要CGImage的吗?如果有,是什么?
-
另外,关于内存泄漏,您是否尝试过使用 Instruments 的 Leaks 模板?在 Leaks 工具和 Allocations 工具的 Heapshot 工具之间,您应该能够确定您在应用程序中的哪个位置泄漏或积累了内存。
-
@PeterHosey 我做了,我发现由于某种原因我有超过 200 个 CIImage 的实时实例和超过 100 个 CGImage 的实时实例,所有这些都源自这种方法。我只是不知道在哪里
标签: ios core-graphics core-image cgimage ciimage