捕获的UIView图像有扭曲的颜色(iPhone SDK)

时间:2009-12-14 18:48:22

标签: iphone uiview screen-capture

我正在使用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文件,用于绘制搜索字段背景以及按钮背景。

有谁知道什么可能导致这种奇怪的颜色失真?

致以最诚挚的问候,

4 个答案:

答案 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的评论:

http://www.kaoma.net/iphone/?p=9

答案 3 :(得分:0)

当您只想捕获视图时,UIGetScreenImage()非常烦人。 我找到了一个很好的技巧,只需使用Preview.app将所有PNG图像重新保存为TIFF格式:)