3

私はビデオ会議アプリに取り組んでおり、次のコードはフレームを画面に正常に描画します:

 -(int)drawFrameOnMainThread{
    if(mBitmapContext){
        if(mDisplay){
            CGImageRef imageRef = CGBitmapContextCreateImage(mBitmapContext);
    #if TARGET_OS_IPHONE
            UIImage *image = [UIImage imageWithCGImage:imageRef];

            [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];

    #elif TARGET_OS_MAC
            [mDisplay setCurrentImage:imageRef];
    #endif
            CGImageRelease(imageRef);
        }
    }
    return 0;
}

描画中のフレームに CIFilter を適用したいので、コードの iOS セクションを次のように変更します。

UIImage *image = [UIImage imageWithCGImage:imageRef];

        CIImage *beginImage = image.CIImage;

        CIContext *context = [CIContext contextWithOptions:nil];

        CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" 
                                      keysAndValues: kCIInputImageKey, beginImage, 
                            @"inputIntensity", [NSNumber numberWithFloat:0.8], nil];
        CIImage *outputImage = [filter outputImage];

        CGImageRef cgimg = 
        [context createCGImage:outputImage fromRect:[outputImage extent]];
        UIImage *newImg = [UIImage imageWithCGImage:cgimg];

[self performSelectorOnMainThread:@selector(setImage:) withObject:newImg waitUntilDone:YES];

その結果、ビデオ画面が黒いままになります。誰でもここでエラーを見ることができますか? 私は数時間これに取り組んでいますが、それを理解することはできません.

4

1 に答える 1

4

問題を修正しました。問題は、CIImageを次の行で初期化することでした。

//Wrong

CIImage *beginImage = image.CIImage;

//Right
CIImage *beginImage = [CIImage imageWithCGImage:imageRef];

ブラッドが言ったように、パフォーマンスは許容できません。iPad2では、ビデオはオーディオより約5秒遅れています。それで、これに対する他の解決策を調べますが、それが他の何よりも概念実証として機能しているのを見て、それでも嬉しかったです:)

于 2012-04-26T21:58:28.970 に答える