Cocoa 转换为JPEG时,我应该如何考虑CGImageAlphaInfo?

Cocoa 转换为JPEG时,我应该如何考虑CGImageAlphaInfo?,cocoa,macos,quartz-graphics,cgimage,Cocoa,Macos,Quartz Graphics,Cgimage,我正在使用此方法,并使用生成的CGImageRef将其添加到CGImageDestinationRef中,该方法设置为以kUTTypeJPEG形式完成: - (CGImageRef)scaleImage:(CGImageRef)fullImageRef originalSize:(CGSize)originalSize scale:(CGFloat)scale; { CGSize imageSize = originalSize; CGRect scal

我正在使用此方法,并使用生成的
CGImageRef
将其添加到
CGImageDestinationRef
中,该方法设置为以
kUTTypeJPEG
形式完成:

- (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文档,也读过Quartz书籍的优秀编程(由Gelphman和Laden编写),但我仍然不确定我的方法

我在jpeg的属性字典中将属性KCGIMAGEDESTINATIONOSSYCompressionQuality设置为1.0,并捕获了其他属性

我应该做更多的事情来保持原作的颜色完整性吗


这是macos,使用gc。

这没什么关系,因为JPEG不支持alpha(至少不支持or),所以您可以预期CGImageDestination将在导出阶段丢弃alpha通道

我会先尝试原始图像的alpha信息,如果我不能以这种方式创建位图上下文,我会使用
kgimagealphanoneskipfirst
kgimagealphanoneskiplast
。当然,对于其他目标文件格式,我会使用其中一种alpha和预乘颜色像素格式

具有CGBitmapContext支持的组合的完整列表