4

誰でもこれで私を助けることができますか?MPMediaPlayerController で再生中のビデオからスクリーンショットを取得したいと考えています。私がこれまでに試したことは次のとおりです。

-(void)viewDidLoad
{
NSURL *tempFilePathURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"LMFao" ofType:@"mp4"]];
player = [[MPMoviePlayerController alloc] initWithContentURL:tempFilePathURL];
[player setControlStyle:MPMovieControlStyleFullscreen];
//Place it in subview, else it won’t work
player.view.frame = CGRectMake(0, 0, 320, 400);
[self.view addSubview:player.view];
}

-(IBAction)screenshot
{
CGRect rect = [player.view bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[player.view.layer renderInContext:context];   
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

imgView = [[UIImageView alloc] initWithFrame:CGRectMake(150, 150, 100, 100)];
[imgView setImage:image];
imgView.layer.borderWidth = 2.0;
[self.view addSubview:imgView];
}

そして、私が今持っているのはこれです:-

スクリーンショット

現在何が起こっているかというと、プレーヤーのボタンがスクリーンショットにキャプチャされていますが、ビデオの画像が取得されていません.ビデオにオーバーレイがあるため、このコンテキストメソッドを使用して画像をキャプチャしています.サムネイルメソッドを使用してビデオをキャプチャすることはできません.オーバーレイですが、オーバーレイでビデオの画像を取得したいです。

編集: 私が欲しいのは、この画像に示すように、このビデオと描画オーバーレイの両方のスクリーンショットを取得することです ビデオにオーバーレイ

しかし、私が得ているのは、スクリーンショットにオーバーレイではなくビデオのみを取得した1つの方法であり、その方法はサムネイルメソッドであり、MPMoviePlayerControllerによって提供されるサムネイルを作成していました。メソッドはコンテキストメソッドです。私はrectのコンテキストを取得しています。今、これに対する解決策は、これらの両方の画像を結合することであると考えました。

助けてください。ありがとう:)

4

3 に答える 3

2

mpmovieplayer オブジェクトで 1 つのメソッドを呼び出すだけです。

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

このメソッドは UIImage オブジェクトを返します。あなたがしなければならないことはただ:

UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

詳細については、MPMoviePlayerControllerを参照してください。

お役に立てれば

編集:あなたの方法では、最初にプレーヤーのコントロールを非表示にしてから、イメージをキャプチャしてからコントロールを再度表示できます。controlStyleこれは、MPMoviePlayerController のプロパティを使用して実現できます。

これがあなたが探しているものかどうかはわかりませんが、私が理解したことです。あなたが別のものを探しているなら、私に知らせてください。

于 2012-05-14T12:39:42.587 に答える
1

この方法で 2 つの画像をマージできます。以下のコードから見てください。

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
    MaskView=[[UIView alloc] init];
    UIImageView *image1=[[UIImageView alloc]init];
    UIImageView *image2=[[UIImageView alloc]init];
    MaskView.frame=CGRectMake(0, 0,500,500);    
    image1.frame=CGRectMake(0,0,160, 160);  
    image2.frame=CGRectMake(60,54,40,40);
    image1.image=image;
    image2.image=maskImage;
    [MaskView addSubview:image1];
    [MaskView addSubview:image2];   

    UIGraphicsBeginImageContext(CGSizeMake(160,160));

    [MaskView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *finishedPic = UIGraphicsGetImageFromCurrentImageContext(); 

    return finishedPic;
}
于 2012-05-15T09:35:11.397 に答える
0

これは役立つかもしれません

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

指定された時間にサムネイル画像を取得し、その画像をスケーリングします。

于 2012-05-14T12:36:08.297 に答える