10

iOS 5.x で UIImage の彩度を下げる簡単な方法 (または組み込みライブラリ) はありますか? 現在、私がやっている方法は次のとおりです。

CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextTranslateCTM(context, 0.0, self.bounds.size.height); // flip image right side up
    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextDrawImage(context, rect, self.image.CGImage);
    CGContextSetBlendMode(context, kCGBlendModeSaturation);
    CGContextClipToMask(context, self.bounds, image.CGImage); // restricts drawing to within alpha channel
    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, desaturation);
    CGContextFillRect(context, rect);

    CGContextRestoreGState(context); // restore state to reset blend mode

これは、私が予想していたよりも少し複雑なようです。これより簡単な方法はありますか?

私はCore Imageを考えていましたが、それを使用して画像の彩度を下げる方法に関する具体的な例を見つけることができないようです.

4

1 に答える 1

21

2 ~ 3 行のコードを使用して、私のオープン ソースGPUImageフレームワークでこれを行うことができます。

UIImage *inputImage = [UIImage imageNamed:@"inputimage.png"];    
GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc] init];
UIImage *grayscaleImage = [grayscaleFilter imageByFilteringImage:inputImage];

(ARC を使用してビルドしない場合は、フィルターを解放することを忘れないでください)

これにより、画像がその輝度値まで減少し、彩度が​​低下します。可変彩度/彩度低下が必要な場合は、GPUImageSaturationFilter を使用できます。フレームワーク名が示すように、このフィルタリングは GPU 上で実行され、5.1 の時点で iOS でベンチマークしたほぼすべての状況で Core Image よりも高速です。

于 2012-06-06T03:45:59.677 に答える