Я передаю этот метод и использую результирующее 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 для моих целей.
Я прочитал «Кварцевые документы», а также превосходную книгу «Программирование с кварцем» (Гельфмана и Ладена), но я все еще не уверен в своих методах.
Я установил для свойства kCGImageDestinationLossyCompressionQuality значение 1.0 в словаре свойств jpeg вместе с записью других свойств.
Должен ли я делать что-то еще, чтобы сохранить целостность цвета оригинала?
это macos, а с помощью gc.