我正在使用UIGraphicsGetImageFromCurrentImageContext()函数将屏幕内容捕获到UIImage对象(之前渲染到Image上下文中)。这对于模拟器和真实设备都很有效,但在后者中,生成的图像有一些像素颜色失真的像素,如下所示:
http://img300.imageshack.us/img300/2788/screencap.png
请注意顶部导航栏上的几个fucsia像素,搜索字段的两侧和按钮的右侧。左下角按钮的右侧也有这样的像素。
我用来将屏幕视图捕获到UIImage对象的代码非常简单:
UIGraphicsBeginImageContext(self.view.window.frame.size);
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *anImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
需要注意的是,所有失真的图形都属于自定义PNG文件,用于绘制搜索字段背景以及按钮背景。
有谁知道什么可能导致这种奇怪的颜色失真?
致以最诚挚的问候,
答案 0 :(得分:1)
刚检查了我自己的代码,它正在做同样的事情。你的几乎与我的完全相同,只是我要求视图的层渲染而不是窗口,即:
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
我不知道为什么会有所作为,但值得一试。
答案 1 :(得分:1)
使用刚刚批准的私有函数UIGetScreenImage()来解决它。
有关详细信息,请查看http://www.tuaw.com/2009/12/15/apple-relents-and-is-now-allowing-uigetscreenimage-for-app-st/和https://devforums.apple.com/message/149553
此致
答案 2 :(得分:1)
本文解释了图像损坏的问题(由部分透明像素引起),并提供了一种解决方案,证实了Chris的评论:
答案 3 :(得分:0)
当您只想捕获视图时,UIGetScreenImage()非常烦人。 我找到了一个很好的技巧,只需使用Preview.app将所有PNG图像重新保存为TIFF格式:)