截屏并重命名保存到任意路径下


#1

**直接上源码!

UIView * screenView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];

UIGraphicsBeginImageContextWithOptions(screenView.frame.size, YES, [[UIScreen mainScreen] scale]);

[screenView drawViewHierarchyInRect:screenView.bounds afterScreenUpdates:YES];

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

1.保存到相册

UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);

2.保存到任意路径

NSString *pathDocuments = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; //沙盒目录,可以自己修改

NSString*filePath=[pathDocuments stringByAppendingPathComponent:@“contact.png”];

NSData * creenData =UIImagePNGRepresentation(screenImage);

NSFileManager * fileManager=[NSFileManager defaultManager];

[fileManager createFileAtPath:filePath contents:creenData attributes:nil];

搞了我一天半,总算出来了,记录一下分享一下!!


#2

备注:仅支持iOS7以上


#3

这个是自己的App用来截屏的吗?


#4

狗神回复,好激动!用这个方法就可以的,就是截屏的,可以截取全屏,也可以截取某个区域;系统提供的方法!


#5

可以很详细,考虑纳入干货区,置顶贴。如果能写写整个获取这些API的思路与过程会更好


#6

嗯嗯,感谢推荐,也是误打误撞弄出来的,论坛里有一些帖子给了一些启示,那就简单写一下心路历程吧。


#7

找这个功能找了很久,在论坛里看了很多篇帖子,但是自己用都不是很好用,也有很多朋友遇到各种问题,首先是看到了这篇帖子。

http://www.iosre.com/t/tweak/1231

然后看到狗神的回复到了这篇帖子

http://bbs.iosre.com/t/ios/642

然后用了第四种方法并把图片存到相册里,然后发现存到相册里面的是全白或者是全黑的。
我想着就放弃了,然后就想去砸壳相册做一个监听,砸壳过程中遇到了一些坑,填完一个又来一个就放弃了返回去又去看那个代码。
然后就正向开发了一下,使用
UIView * view = [UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
查看了一下这个view是不是有东西,果不其然是有东西的,然后就判断是渲染出了问题,在渲染上下文处view.layer有问题,这是我的推断,后来我就去找绕过这个东西的方法。

运气还算好,找到一些原因,发现方法在一些系统上面有bug或者被废弃了,然后误打误撞碰到了
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
然后就抱着试一试的心态测试了一下,然后居然成功了!!!!

然后后面就水到渠成了,将view转成img,然后img转成二进制进行重命名,都迎刃而解了。

这个坑从年前卡住了,然后到了近期才有头绪,也算功德圆满!!


#8

正向开发会用到这种截屏方法


#9

嗯,结合逆向使用的


#10

[screenView drawViewHierarchyInRect:screenView.bounds afterScreenUpdates:YES];

这句话对内存消耗比较大,还需要持续修改,如有大神知道,求指导,谢谢!


#11

截图是黑的啊


#12

不会吧?我测了是好的啊


#13

请问把代码复制过去 为什么报 C++ requires a type specifier for all declarations 刚接触逆向 新手不懂 求楼主大大解答


#14

请问把代码复制过去 为什么报 C++ requires a type specifier for all declarations 刚接触逆向 新手不懂 求楼主大大解答


#15

你用的Tweak还是iOSOpenDev?


#16

tweak


#17

会正向的都会。只不过我自己写了一些方法,直接从内存读取图片,通过python调用osx系统程序直接显示出来。


#18

这个已经有很成熟的现成工具了


#19

叫什么名字?


#20

截图之后是黑屏