1

我试图弄清楚如何将 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);
}
4

1 回答 1

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));
于 2013-07-09T21:21:08.590 回答