将CGImageRef保存为JPEG2000

时间:2013-07-09 19:25:12

标签: objective-c core-graphics

我正在试图弄清楚如何将CGImageRef保存为JPEG2000。

目前我的图像输出看起来很分散。

我有以下代码,适用于除kUTTypeJPEG2000之外的所有其他格式。保存为kUTTypeGIF或kUTTypePNG可以正常工作。有趣的是,保存为没有alpha通道的kUTTypeJPEG2000也可以。

如何正确输出图像?

- (void)saveImage:(CGImageRef)image path:(NSString *)path
{
    // Set the image compression quality
    CFMutableDictionaryRef properties = CFDictionaryCreateMutable(nil,
                                                                  0,
                                                                  &kCFTypeDictionaryKeyCallBacks,
                                                                  &kCFTypeDictionaryValueCallBacks);

    // Save and finalize
    CFURLRef url = CFBridgingRetain([[NSURL alloc] initFileURLWithPath:path]);

    CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypeJPEG2000, 1, NULL);
    CGImageDestinationAddImage(destination, image, properties);
    CGImageDestinationFinalize(destination);

    CFRelease(url);
}

1 个答案:

答案 0 :(得分:0)

固定。

对于源图像,我们需要指定CGImageGetBytesPerRow(image),而不是使用每行的默认字节设置创建上下文:4 * width

size_t width = CGImageGetWidth(image);
size_t height = CGImageGetHeight(image);
size_t bytesPerRow = 4 * width;

CGContextRef context = CGBitmapContextCreate(NULL,
                                             width,
                                             height,
                                             CGImageGetBitsPerComponent(image),
                                             bytesPerRow,
                                             CGImageGetColorSpace(image),
                                             CGImageGetAlphaInfo(image));