2012年5月13日日曜日

Core Video Task (6)

Core Video の役割は次の三つ.
1) Obtaing Frames Using the Display Link
2) Manipulationg Frames
3) Using Core Image Filtering With Core Video 

今回は 3) Using Core Image Filtering With Core Video です.

あるビデオにフィルタリング効果を適用したい場合,おおよそ Core Image filter を適用する方が,自分でコーディングするよりシンプルなことが多いらしいです.そのようにするには,対象となるフレームを Core Image 画像として扱う必要があります.

Core Image CIFilter のメソッド filterWithName: を使って Core Image filter を以下のように読み込みます.
effectFilter = [[CIFilter filterWithName:@"CILineScreen"] retain];
[effectFilter setDefaults];

フィルタを読み込んだら,そのフィルタを使って対象の画像を処理します. Listing 2-9 にどのように適用するかを示してあります. これは, Core Image context に描く前に入力画像をフィルタリングしている以外は Listing 2-8 と同じものです.

Listing 2-9  Applying a Core Image filter to an image
- (void)renderCurrentFrameWithFilter
{
    NSRect      frame = [self frame];
 
    if(currentFrame)
    {
        CGRect      imageRect;
        CIImage     *inputImage, *outputImage;
 
        inputImage = [CIImage imageWithCVImageBuffer:currentFrame];
 
        imageRect = [inputImage extent];
        [effectFilter setValue:inputImage forKey:@"inputImage"];// 1
        [[[NSGraphicsContext currentContext] CIContext]// 2
            drawImage:[effectFilter valueForKey:@"outputImage"]
            atPoint:CGPointMake((int)
                ((frame.size.width - imageRect.size.width) * 0.5),
                (int)((frame.size.height - imageRect.size.height) * 0.5))
            fromRect:imageRect];
 
    }
    QTVisualContextTask(qtVisualContext);
}
コードの説明です.

  1. 対象フレームに CIImage フィルタをセットします
  2. その指定されたフィルタで描画をします


以上です.

0 件のコメント:

コメントを投稿