【发布时间】:2010-12-17 17:00:32
【问题描述】:
我正在使用此方法并使用生成的 CGImageRef 将其添加到设置为最终确定为 kUTTypeJPEG 的 CGImageDestinationRef:
- (CGImageRef)scaleImage:(CGImageRef)fullImageRef originalSize:(CGSize)originalSize scale:(CGFloat)scale;
{
CGSize imageSize = originalSize;
CGRect scaledRect = CGRectMake(0.0, 0.0, imageSize.width * scale, imageSize.height * scale);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(fullImageRef);
CGContextRef context = CGBitmapContextCreate(NULL, scaledRect.size.width, scaledRect.size.height, 8, 0, colorSpace, CGImageGetAlphaInfo(fullImageRef));
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGImageRef subImage = CGImageCreateWithImageInRect(fullImageRef, scaledRect);
CGContextDrawImage(context, scaledRect, subImage); // offscreen
CGImageRef scaledImage = CGBitmapContextCreateImage(context);
CGImageRelease(subImage);
subImage = NULL;
subImage = scaledImage;
CGImageRelease(scaledImage);
CGContextFlush(context);
CGContextRelease(context);
return subImage;
}
我需要确保生成的 JPEG 与原始文件的颜色尽可能匹配。
我不清楚的是 CGImageAlphaInfo 常量对于我的目的的实际作用。
我已经阅读了 Quartz 文档,以及优秀的 Programming With Quartz 一书(由 Gelphman 和 Laden 撰写),但我仍然不确定我的方法。
我已在 jpeg 的属性字典中将属性 kCGImageDestinationLossyCompressionQuality 设置为 1.0,同时捕获其他属性。
我应该做更多的事情来保持原件的颜色完整性吗?
这是 macOS,使用 gc。
【问题讨论】:
标签: cocoa macos quartz-graphics cgimage