私はこのメソッドに引き継ぎ、その結果を使用して、 としてファイナライズするためにセットアップされ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のドキュメントを読んだことがあります.また、優れたプログラミング・ウィズ・クオーツの本(GelphmanとLadenによる)も読んだことがあります.
他のプロパティをキャプチャするとともに、jpeg のプロパティ ディクショナリでプロパティ kCGImageDestinationLossyCompressionQuality を 1.0 に設定しました。
元の色の完全性を維持するために、もっと何かをする必要がありますか?
これはmacosで、gcを使用しています。