3

我正在使用 UIGraphicsGetImageFromCurrentImageContext() 函数将屏幕内容捕获到 UIImage 对象中(之前渲染到 Image 上下文中)。这对模拟器和真实设备都很有效,但是在后者中,生成的图像有几个像素颜色失真,如下所示:

http://img300.imageshack.us/img300/2788/screencap.png

请注意顶部导航栏、搜索字段两侧和按钮右侧的几个紫红色像素。左下角按钮的右侧也有这样的像素。

我用来将屏幕视图捕获到 UIImage 对象中的代码非常简单:

UIGraphicsBeginImageContext(self.view.window.frame.size);
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *anImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

需要注意的一点是,所有被扭曲的图形都属于自定义 PNG 文件,用于绘制搜索字段背景和按钮背景。

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

最好的祝福,

4

4 回答 4

1

刚刚检查了我自己的代码,它正在做同样的事情。你的几乎和我的一样,除了我要求渲染视图的图层而不是窗口的图层,即:

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

我不知道为什么这会有所作为,但值得一试。

于 2009-12-15T14:46:13.220 回答
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

问候,

于 2009-12-16T01:35:05.977 回答
1

本文解释了图像损坏(由部分透明像素引起)的问题,并提供了一种解决方法来证实 Chris 的评论:

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

于 2010-11-11T13:29:53.887 回答
0

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

于 2010-04-28T09:53:53.813 回答