2

アプリにタッチ ブラー効果を実装する必要があります。基本的なフィルタリングにGPUImageを使用していますが、画像内の任意の領域をぼかす機能も含める必要があります。これについて数日間苦労しましたが、他に役立つ質問/回答が見つかりませんでした。

GPUImage を利用しない現在の (疑似コード) 実装は次のとおりです。

In the pan gesture recognizer, I'm collecting the pan gesture objects and saving them to an array.  When UIGestureRecognizerStateEnded, I attempt to apply the blur using:

1. Get image from GPUImagePicture.
2. Create a "CIGaussianBlur" CIFilter to create a blurred image.
3. Loop through the gesture taps
4. Create a CIFilter mask with a CIRadialGradient with the location as center.
5. Composite the masks into 1 mask: 
maskImage = [[CIFilter filterWithName:@"CISourceOverCompositing" keysAndValues:
             kCIInputImageKey, gassBlur, kCIInputBackgroundImageKey, maskImage, nil] valueForKey:kCIOutputImageKey];

6. Crop the mask:
CIVector *rect = [CIVector vectorWithCGRect:origImage.extent];
maskImage = [CIFilter filterWithName:@"CICrop" keysAndValues:kCIInputImageKey, maskImage, @"inputRectangle", rect, nil].outputImage;

7. Use a CIBlendWithMask filter to combine the original image, the mask, and the blurred image:
CIFilter *blendedFilter = [CIFilter filterWithName:@"CIBlendWithMask" keysAndValues:
                           @"inputImage", pixellateFilter.outputImage,
                           @"inputBackgroundImage", origImage,
                           @"inputMaskImage", maskImage,
                           nil];

8. Update the image view with the new image:
[self.tempImgView setImage:[UIImage imageWithCIImage:pixellateFilter.outputImage]];

ユーザーがぼかしブラシで画像を「ペイント」しているかのように、ぼかし効果をリアルタイムで作成するにはどうすればよいですか? これの完璧な例はアプリTouch Blurです。

編集1:

私のフィルターチェーンは次のようなものです:

[self.staticPicture addTarget:self.filter]; // self.filter is some B&W, sepia, etc filter
[self.filter addTarget:self.blurFilter];    // I think the blur filter should be modified somehow
[self.blurFilter addTarget:self.gpuImageView];
[self.staticPicture processImage];

何らかの方法でパン ジェスチャ イベントで self.blurFilter を更新し、毎回 processImage を呼び出して gpuImageView を更新する必要があります。

4

1 に答える 1