FilterShowcase の例を見ると、これが実際にどのように機能するかを確認できます。
GPUImageHistogramFilter は画像を取り込み、ヒストグラムをエンコードする 256x3 画像を出力します (フレームバッファーの構成では高さ 1 ピクセルが許可されていないため、高さは 3 ピクセルです)。R、G、および B の値は、そのイメージの中央にある高さ 1 ピクセルのストライプ内のそれぞれのカラー チャネルに格納されます。
これを視覚化するには、GPUImageHistogramGenerator を使用し、GPUImageHistogramFilter の出力をそれにフィードする必要があります。GPUImageHistogramGenerator は、ヒストグラム入力の視覚的表現を画像として作成します。-forceProcessingAtSize:
デフォルトではサイズが設定されていないため、GPUImageHistogramGenerator の出力画像のサイズを設定するために使用する必要があります。
もう 1 つの注意点は、入力画像と GPUImageHistogramFilter の間に何らかのダミー フィルターが必要になることです。GPUImageHistogramFilter は現在依存してglReadPixels()
おり、直接アップロードされた画像やビデオ フレームではなく、レンダリングされたコンテンツに対してのみ機能します。
このために FilterShowcase で使用されるコードは次のとおりです。
filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB];
GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
[videoCamera addTarget:gammaFilter];
[gammaFilter addTarget:filter];
GPUImageHistogramGenerator *histogramGraph = [[GPUImageHistogramGenerator alloc] init];
[histogramGraph forceProcessingAtSize:CGSizeMake(256.0, 330.0)];
[filter addTarget:histogramGraph];
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.75;
[blendFilter forceProcessingAtSize:CGSizeMake(256.0, 330.0)];
[videoCamera addTarget:blendFilter];
[histogramGraph addTarget:blendFilter];
[blendFilter addTarget:filterView];
これにより、生成されたヒストグラム ビジュアライゼーションが着信カメラ ビデオの上にオーバーレイされます。