博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
阅读量:2397 次
发布时间:2019-05-10

本文共 3028 字,大约阅读时间需要 10 分钟。

转载自: http://www.jianshu.com/p/8e9234a70955

1.截取当前屏幕,导航栏不见。   
方法:
- (UIImage*)screenView:(UIView *)view{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth(view.frame), CGRectGetHeight(view.frame)), NO, 1);
[view drawViewHierarchyInRect:CGRectMake(0, 0, CGRectGetWidth(view.frame), CGRectGetHeight(view.frame)) afterScreenUpdates:NO];
UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return snapshot;
}
使用:
UIImage *image = [self screenView: [UIApplication sharedApplication].keyWindow ];
UIImageView *snapView = [[UIImageView alloc] initWithImage:image];
snapView.alpha = 1.0f;
snapView.frame = [UIApplication sharedApplication].keyWindow.frame;
2.AVplay 视频流的截屏
发现视频流的截屏是黑色,而不是当前帧的画面
#pragma mark - 截图 点击事件 方法
- (IBAction)didClickSnip:(UIBarButtonItem *)sender {
self.imgGenerator = [[AVAssetImageGenerator alloc]initWithAsset:self.playerItem.asset];
self.imgGenerator.requestedTimeToleranceBefore = kCMTimeZero;
self.imgGenerator.requestedTimeToleranceAfter = kCMTimeZero;
//第一种 --截图方法
//    CGImageRef imgRef = [self.imgGenerator copyCGImageAtTime:self.player.currentTime actualTime:NULL error:nil];
//
//    self.snipImageView.image = [UIImage imageWithCGImage:imgRef];
//第二种 --截图方法
NSValue *value = [NSValue valueWithCMTime:self.player.currentTime];
[self.imgGenerator generateCGImagesAsynchronouslyForTimes:@[value] completionHandler:^(CMTime requestedTime, CGImageRef  _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) {
//这里先用OC对象对C变量强引用,保证在回到主线程中不会被释放掉
UIImage *img = [UIImage imageWithCGImage:image];
dispatch_async(dispatch_get_main_queue(), ^{
self.snipImageView.image = img;
});
}];
}
3.AVplay 获取当前帧图片
/**
Description
获取当前帧图片
@return return value description
*/
//获取输出流的地址
@property(nonatomic, strong) AVPlayerItemVideoOutput * videoOutPut;
-(UIImage*)getScreenShotImg{
CMTime time = [self.videoOutPut itemTimeForHostTime:CACurrentMediaTime()];
if (0 == time.value) {
return nil;
}
//截取到对应的图片
if ([self.videoOutPut hasNewPixelBufferForItemTime:time]) {
CVPixelBufferRef lastSnapshotPixelBuffer = [self.videoOutPut copyPixelBufferForItemTime:time itemTimeForDisplay:NULL];
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:lastSnapshotPixelBuffer];
CIContext *context = [CIContext contextWithOptions:NULL];
CGRect rect = CGRectMake(0,
0,
CVPixelBufferGetWidth(lastSnapshotPixelBuffer),
CVPixelBufferGetHeight(lastSnapshotPixelBuffer));
CGImageRef cgImage = [context createCGImage:ciImage fromRect:rect];
self.screenShotImg = [UIImage imageWithCGImage:cgImage];
//当前帧的画面
CGImageRelease(cgImage);
return self.screenShotImg;
}
return nil;
}
作者:白色的黑豹1链接:http://www.jianshu.com/p/8e9234a70955來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的文章
用shell帮助解决ORA问题
查看>>
关于连续登录的问题探究
查看>>
10g升级至11g后数据库无法启动的问题解决
查看>>
SQLPLUS Fails With SP2-1503 SP2-0152 After New 11.2 Installation解决
查看>>
linux下安装mysql的问题解决
查看>>
10g升级至11g exp的问题解决
查看>>
oracle坏块修复实例
查看>>
sqlplus连接数的测试
查看>>
虚拟专用数据库VPD应用
查看>>
linux kernel引发的oracle问题及解决
查看>>
可更新的物化视图
查看>>
vpd碰到的问题解决
查看>>
关于segment的一个小问题
查看>>
ORA-01461问题的对比测试
查看>>
数据库环境中的shell脚本应用
查看>>
狗狗的天空
查看>>
alert日志中出现ash size的警告
查看>>
10g升级至11g需要考虑的参数优化
查看>>
永远的吉他情结
查看>>
excel文件内容导入数据库的问题及解决
查看>>