3

のセットを作成GPUImageToneCurveFilterして配列に格納します。

最初に、フィルター詳細ビュー (GPUImageStillCamera ) を追加しようとしているフィルターを選択した後、GPUImageVideoCamera を使用してすべてのフィルターのプレビュー ビデオ ビューを作成しています。しかし、私はこれのために黒い画面を取得しています。

再利用する代わりに新しいフィルターを再作成してから GPUImageStillCamera に追加すると、正常に動作します。これに対する任意の解決策。

プレビュー ビュー作成コード:

    -(void)setUpUI{

    self.videoView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    }




-(void)addFilter:(id)filter
        {
        // For thumbnails smaller than the input video size, we currently need to make them render at a smaller size.
        // This is to avoid wasting processing time on larger frames than will be displayed.
        // You'll need to use -forceProcessingAtSize: with a zero size to re-enable full frame processing of video.
        self.filter = filter;
        [filter forceProcessingAtSize:self.videoView.sizeInPixels];
        [[CameraProvider sharedProvider] addTarget:filter];
        [filter addTarget:self.videoView];

        [[CameraProvider sharedProvider] startCameraCapture];
        self.titleLabel.text = [filter fliterName];
        }



 -(void)stopCamera
        {
        [self.filter removeAllTargets];
        [[CameraProvider sharedProvider] removeTarget:self.filter];
        [[CameraProvider sharedProvider] stopCameraCapture];

        }



-(IBAction)selectionDone:(id)sender { 

            [[CameraProvider sharedProvider] removeInputsAndOutputs]; 
             self.selectedFilter(self.filter);

     }


 // Adding to detail view (GPUImageStillCamera0:





  - (void)didSelectFilter:(id)newfilter;
        {
        NSLog(@"fliter");
        // newfilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"california-gold-rush.acv"];
        [newfilter prepareForImageCapture];
        [stillCamera addTarget:newfilter];
        [newfilter addTarget:self.imageView];

        [stillCamera startCameraCapture];
    }
4

1 に答える 1

0

再利用する代わりに新しいフィルターを再作成してから GPUImageStillCamera に追加すると、正常に動作します。

明白なことは言いたくないのですが、解決策は、フィルターを再利用しようとするのではなく、必要なときにフィルターを再作成することです。

その配列から必要なのは、「インデックスを指定してフィルター オブジェクトを取得する方法」です。そのフィルター オブジェクトを取得するには、さまざまな方法があります。それらの 1 つは、配列と配列へのインデックスを事前に割り当てることです。もう 1 つは、インデックスを指定すると、配列から取得したものと同じ型の新しく作成されたオブジェクトを返す関数を作成することです。フィルターの配列を使用する代わりに、フィルターにファクトリーの配列を使用します。

于 2012-11-21T14:47:13.097 に答える