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