Overlay Blend
ストック画像の不透明度が100%未満のカメラフィードの出力でストック画像を作成しようとしています。GPUImageOpacityFilter
フィルタースタックに a を配置するだけで、すべてうまくいくと思いました。
- GPUImageVideoCamera -> MY_GPUImageOverlayBlendFilter
- GPUImagePicture -> GPUImageOpacityFilter (不透明度 0.1f) -> MY_GPUImageOverlayBlendFilter
- MY_GPUImageOverlayBlendFilter -> GPUImageView
しかし、その結果、GPUImagePicture の 0.1f アルファ バージョンが GPUImageVideoCamera にブレンドされたわけではなく、GPUImagePicture の色/コントラストが少し柔らかくなり、それがブレンドされました。だから私はいくつかの検索を行い、提案に基づいて GPUImageOpacity フィルターから UIImage を取得し、それを BlendFilterimageFromCurrentlyProcessedOutput
に送信しようとしました。
- GPUImagePicture -> MY_GPUImageOpacityFilter (不透明度 0.1f)
- [MY_GPUImageOpacityFilter imageFromCurrentlyProcessedOutput] -> MY_alphaedImage
- GPUImagePicture (MY_alphaedImage) -> MY_GPUImageOverlayBlendFilter
- GPUImageVideoCamera -> MY_GPUImageOverlayBlendFilter
- MY_GPUImageOverlayBlendFilter -> GPUImageView
そして、それは私が期待したとおりに機能しました。それで、なぜ私はしimageFromCurrentlyProcessedOutput
なければならないのですか?上記の 2 つのシナリオのコード スニペットを次に示します。
最初の1つ:
//Create the GPUPicture
UIImage *image = [UIImage imageNamed:@"someFile"];
GPUImagePicture *textureImage = [[[GPUImagePicture alloc] initWithImage:image] autorelease];
//Create the Opacity filter w/0.5 opacity
GPUImageOpacityFilter *opacityFilter = [[[GPUImageOpacityFilter alloc] init] autorelease];
opacityFilter.opacity = 0.5f
[textureImage addTarget:opacityFilter];
//Create the blendFilter
GPUImageFilter *blendFilter = [[[GPUImageOverlayBlendFilter alloc] init] autorelease];
//Point the cameraDevice's output at the blendFilter
[self._videoCameraDevice addTarget:blendFilter];
//Point the opacityFilter's output at the blendFilter
[opacityFilter addTarget:blendFilter];
[textureImage processImage];
//Point the output of the blendFilter at our previewView
GPUImageView *filterView = (GPUImageView *)self.previewImageView;
[blendFilter addTarget:filterView];
二つ目:
//Create the GPUPicture
UIImage *image = [UIImage imageNamed:@"someFile"];
GPUImagePicture *textureImage = [[[GPUImagePicture alloc] initWithImage:image] autorelease];
//Create the Opacity filter w/0.5 opacity
GPUImageOpacityFilter *opacityFilter = [[[GPUImageOpacityFilter alloc] init] autorelease];
opacityFilter.opacity = 0.5f
[textureImage addTarget:opacityFilter];
//Process the image so we get a UIImage with 0.5 opacity of the original
[textureImage processImage];
UIImage *processedImage = [opacityFilter imageFromCurrentlyProcessedOutput];
GPUImagePicture *processedTextureImage = [[[GPUImagePicture alloc] initWithImage:processedImage] autorelease];
//Create the blendFilter
GPUImageFilter *blendFilter = [[[GPUImageOverlayBlendFilter alloc] init] autorelease];
//Point the cameraDevice's output at the blendFilter
[self._videoCameraDevice addTarget:blendFilter];
//Point the opacityFilter's output at the blendFilter
[processedTextureImage addTarget:blendFilter];
[processedTextureImage processImage];
//Point the output of the blendFilter at our previewView
GPUImageView *filterView = (GPUImageView *)self.previewImageView;
[blendFilter addTarget:filterView];