3

mpmovieplayer コントローラーで再生中のビデオのスクリーン ショットをキャプチャする必要がありますが、取得できるのは赤い画面だけです (カバービューを赤い背景と 0.5 アルファで作成しました)。

コードは次のとおりです。

NSArray *windows = [[UIApplication sharedApplication] windows];
if ([windows count] > 1)
{
    UIWindow *moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];


    UIView *coverView = [[UIView alloc] initWithFrame:moviePlayerWindow.bounds];
    [mainController.moviePlayer pause];  //Without that it won't work either!
    coverView.backgroundColor = [UIColor redColor];
    coverView.alpha = 0.5;
    [moviePlayerWindow addSubview:coverView];

    UIGraphicsBeginImageContext(coverView.bounds.size);
    [coverView.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *screenShot;

    screenShot = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    UIImageWriteToSavedPhotosAlbum(screenShot, self, nil, nil);
}

何か案は???

ありがとう

4

3 に答える 3

2

質問のフォローアップ:

最近、私はこのスレッドで再び求められた機能を必要とするプロジェクトを持っています、そして私はこれに対するアップル提供の解決策がすでにあると言ってうれしいです。このスレッドにアクセスした人が回答を得られるように、これを投稿しています。

MPMoviePlayerControllerに、キャプチャしたい瞬間のUIImageを返すメソッドが追加されました。

- (UIImage *)thumbnailImageAtTime:(NSTimeInterval)playbackTime timeOption:(MPMovieTimeOption)option

キャプチャしたいplaybackTimeとビンゴUIImageを入れるだけです。


コードを見て、mpmovieplayer自体からではなく、画像を取得する別の方法を探す必要があることをお勧めします。その理由は、使用しているメソッドがプライベートフレームワークコードであり、次に、ビデオからスクリーンショットを取得するとクラッシュする可能性が非常に高いためです。

ビデオからスクリーンショットを取得する代わりに、事前にビデオにタグを付けるのはどうですか?コードは、Appleによるアプリの拒否に対して非常に脆弱に見えます。

于 2009-12-07T12:36:45.980 に答える
2

私は彼自身に興味がありました。OpenGL のスクリーンショットを撮ることにも同様の問題があると思います。

このブログ投稿http://getsetgames.com/2009/07/30/5-ways-to-take-screenshots-of-your-iphone-app/を見ると、EAGLView で機能するメソッドがあります。あなたの問題のために試してみる価値があるかもしれません。

于 2009-12-07T12:26:59.870 に答える
0

ビデオ オーバーレイ マスクを撮影しているようですね http://en.wikipedia.org/wiki/Hardware_overlay

于 2009-12-07T13:46:57.943 に答える