2

私は GPUImage ライブラリを使用しており、2 つの画像をリアルタイムでブレンドして、GPUImageView. プレーンなカメラ入力を、フィルター処理されたバージョンとアルファ ブレンドしようとしています。これが私がやろうとしていることです:

          ----------------->----v
--camera--|                     alpha blend ----> image view
          -----> color filter --^

ブレンド フィルターの使用に関する投稿をいくつか見つけましたが、それらはリアルタイム処理の方法ではないようです。https://github.com/BradLarson/GPUImage/issues/319GPUImage: blending two images、およびhttps://github.com/BradLarson/GPUImage/issues/751を見つけました (ただし、どちらもリアルタイム処理 (1 番目と 2 番目)、または機能しない (3 番目)。

ほとんどすべてを試しましたが、取得できるのは GPUImageView の白い画像だけです。アルファ ブレンド フィルターを使用しない場合、たとえば、フォルス カラー フィルターなどを使用するだけで、完全に機能します。これが私のコードです:

blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.5;
[blendFilter prepareForImageCapture];
[blendFilter addTarget:imageView];

passThrough = [[GPUImageFilter alloc] init];
[passThrough prepareForImageCapture];
[passThrough addTarget:blendFilter];

selectedFilter = [[GPUImageFalseColorFilter alloc] init];
[selectedFilter prepareForImageCapture];
[selectedFilter addTarget:blendFilter];

stillCamera = [[GPUImageStillCamera alloc] init];
stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

[stillCamera addTarget:passThrough];
[stillCamera addTarget:selectedFilter];
[stillCamera startCameraCapture];

私が得ているのは、白い空白の画面だけです。に変更[selectedFilter addTarget:blendFilter];すると[selectedFilter addTarget:imageView];、画像に偽色フィルターが表示されます。

アルファ ブレンド フィルターに問題があるようです。入力で呼び出す必要があるいくつかの投稿でそれを読みましたがprocessImage、私が理解している限り、それらの投稿はすべて非リアルタイム入力用です。GPUImageAlphaBlendFilter をリアルタイムで動作させるにはどうすればよいですか?

4

1 に答える 1

2

OK、インターネットとプロジェクトの問題リスト ( https://github.com/BradLarson/GPUImage/issues ) で問題をさらに調査し、回避策を見つけました。ブレンド フィルターをターゲットとして設定する際に、テクスチャ インデックスを具体的に指定する必要がありました。何らかの理由 (おそらくバグ) で、ターゲット ブレンド フィルターを 2 回追加しても、次のインデックスで 2 番目のテクスチャが正しく追加されません。したがって、テクスチャ インデックスを明示的に 0 と 1 に設定するとうまくいきました。

[passThrough addTarget:blendFilter atTextureLocation:0];
[selectedFilter addTarget:blendFilter atTextureLocation:1];

単一ソースのターゲットであるフィルターについてはaddTarget:、 などでも十分です[stillCamera addTarget:selectedFilter];

于 2013-05-13T13:05:58.480 に答える