2

GPUImage を使用してグリーン スクリーン エフェクトを実行しようとしています。私が達成しようとしている効果は、カーテンが開くムービーを再生し、ムービーの白い部分を画像に置き換えることです。これによりカーテンが表示され、カーテンが開いて画像が表示されます。

ムービーが正しく表示され、ムービーの白い部分が黒く表示されますが、カーテンが開いたときに画像が表示されません。誰かが以下のコードを見て、私が間違っていることを教えてもらえますか?

前もって感謝します。グレッグ

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"CurtainsOpening" withExtension:@"m4v"];

GPUImageMovie *movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

movieFile.playAtActualSpeed = YES;

NSLog(@"movie file = %@", movieFile);

GPUImageChromaKeyBlendFilter *filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[(GPUImageChromaKeyBlendFilter *)filter setColorToReplaceRed:1.0 green:1.0 blue:1.0];
[(GPUImageChromaKeyBlendFilter *)filter setThresholdSensitivity:0.0]; //was 0.4

[movieFile addTarget:filter];

UIImage *inputImage = [UIImage imageNamed:@"curtains.jpg"];
NSLog(@"inputImage = %@", inputImage);
GPUImagePicture *overlayPicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];

NSLog(@"overlayPicture = %@", overlayPicture);

[overlayPicture processImage];
[overlayPicture addTarget:filter];
//[movieFile addTarget:overlayPicture];

GPUImageView *view0 = [[GPUImageView alloc] initWithFrame:self.view.frame];
[view0 setFillMode:kGPUImageFillModeStretch];

NSLog(@"view0 = %@", view0);
[filter addTarget:view0];

[self.view addSubview:view0];

[view0 bringSubviewToFront:self.view];

NSLog(@"frame = %f %f", self.view.frame.size.width, self.view.frame.size.height);

[movieFile startProcessing];
4

1 に答える 1

3

私はそれを理解しました。誰かが知りたい場合は、GPUImagePicture変数をインスタンス変数にする必要があるため、コードがメソッドを終了するときに変数がメモリから削除されないようにする必要があります。

于 2012-12-21T04:07:27.193 に答える