Захваченное изображение UIView имеет искаженные цвета (iPhone SDK) - PullRequest
3 голосов
/ 14 декабря 2009

Я использую функцию UIGraphicsGetImageFromCurrentImageContext () для захвата содержимого экрана в объект UIImage (ранее визуализированный в контекст изображения). Это прекрасно работает как для симулятора, так и для реального устройства, однако в последнем случае полученное изображение имеет несколько пикселей с искаженными цветами, как показано здесь:

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 ]

1 голос
/ 11 ноября 2010

Эта статья объясняет проблему с повреждением изображения (вызванного частично прозрачными пикселями) и предоставляет обходной путь, который подтверждает комментарий Криса:

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

1 голос
/ 16 декабря 2009

Решено с помощью только что утвержденной закрытой функции UIGetScreenImage ().

Для получения дополнительной информации, пожалуйста, проверьте http://www.tuaw.com/2009/12/15/apple-relents-and-is-now-allowing-uigetscreenimage-for-app-st/ и https://devforums.apple.com/message/149553

С уважением,

1 голос
/ 15 декабря 2009

Только что проверил мой собственный код, который делает то же самое, что и вы. Ваш почти идентичен моему, за исключением того, что я прошу рендерить слой представления, а не окна, т. Е .:

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

Я не знаю, почему это будет иметь значение, но стоит попробовать.

0 голосов
/ 28 апреля 2010

UIGetScreenImage () довольно раздражает, когда вы просто хотите захватить вид. Я нашел хороший трюк, просто повторно сохраните все ваши изображения PNG в формате TIFF с помощью Preview.app:)

...