iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
来源:互联网 发布:wifi音频接收器 软件 编辑:程序博客网 时间:2024/06/09 13:51
转载自: http://www.jianshu.com/p/8e9234a70955
作者:白色的黑豹1链接: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;
}
- iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
- IOS 视屏开发之AVPlayer的基本使用
- iOS-AVPlayer的简单使用
- iOS AVPlayer的简单应用
- 关于 AVPlayer的总结-1
- QT 出现光标不见的情况
- iOS导航栏隐藏的情况下设置状态栏颜色
- 获取ios设备的存储空间当前情况
- iOS每日一记-------屏幕截屏的妙用
- iOS 获取当前屏幕显示的viewcontroller
- iOS 截取当前屏幕的方法
- iOS //获取当前屏幕显示的viewcontroller
- iOS-获取当前屏幕显示的ViewController
- ios 获取当前屏幕的ViewController
- iOS 获取当前屏幕显示的viewcontroller
- iOS的影片播放 MediaPlayer 和 AVPlayer
- iOS的影片播放 MediaPlayer 和 AVPlayer
- iOS AvPlayer AvAudioPlayer音频的后台播放
- React入门学习
- 常见的设计模式
- Qml饼状图
- 栈与队列- STL double_queue
- 209. Minimum Size Subarray Sum
- iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
- centos7 下的 Redis 安装 && 启动 && 关闭 && 卸载
- php+ajax+json 详解及实例代码
- Mentor Graphics Capital 2014.1官方版下载附安装教程
- Matlab学习笔记(一)基础函数
- chrome浏览器新特性
- vim-编辑器之神
- 基于spring boot项目的多数据源配置
- DevC++出现[Error] ld returned 1 exit status解决