4

在下面的代码中,我在 CGImageDestinationFinalize() 行上崩溃了。CGImage 是一张大的 JPG 照片。如果我使用较小的 JPG,它可以正常工作。但是任何超过 10MB 的东西都会在“内存不足”的情况下在设备上崩溃。

我认为 CGImageDestination* 方法正在流式传输写入,但我必须做错事来保留数据。

在编写大型 JPG 时,我应该使用另一个 API 调用吗?

BOOL SKImageWriteToDisk(CGImageRef image, NSURL *url, SKImageProfile profile, CGFloat dpi)
{
    CFStringRef type = profile == SKmageProfileCompressed ? kUTTypeJPEG : kUTTypePNG;
    CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)url, type, 1, NULL);
    if (!destination) {
        return NO;
    }

    NSMutableDictionary *properties =
    [@{
        (id) kCGImagePropertyDPIHeight: @(dpi),
        (id) kCGImagePropertyDPIWidth: @(dpi)
    } mutableCopy];
    if (profile == SKImageProfileCompressed) {
        properties[(id) kCGImageDestinationLossyCompressionQuality] = @(0.8f);
    }
    CGImageDestinationAddImage(destination, image, (__bridge CFDictionaryRef)properties);
    BOOL finalizeSuccess = CGImageDestinationFinalize(destination); // crash!
    CFRelease(destination);
    return finalizeSuccess;
}
4

0 回答 0