程序化截图歪曲最近邻居

时间:2013-01-07 23:09:50

标签: objective-c ios screenshot

我遇到屏幕截图(以编程方式使用下面的代码)与图像放大(在我的情况下非常远)时实际在屏幕上显示的内容之间的不一致,以及渲染最近邻居以保留硬边缘。我从这些论坛获得了以下截图代码,但保存的是(双线性?)渲染图像而不是最近邻居。

UIGraphicsBeginImageContextWithOptions([[UIScreen mainScreen] bounds].size, NO, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *imageView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(imageView, nil, nil, nil);

我做最近邻居的方式是使用ViewDidLoad中的以下行

automataView.layer.magnificationFilter = kCAFilterNearest;

(automataView是一个带有GIF文件的UIImageView,它作为子视图添加到处理缩放的UIScrollView中)

这是两个图像,第一个是屏幕上的内容,第二个是使用上面的屏幕截图代码保存的内容。 (对不起链接 - “作为垃圾邮件防范机制,不允许新用户发布图片”)

http://www.flickr.com/photos/51983059@N08/8358662379/

http://www.flickr.com/photos/51983059@N08/8358662715/

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果问题仍然相关。

我原本以为插值是你在上下文中绘制自己的对象中设置的东西,但似乎上下文本身做了一些插值,它具有带吸气器和设置器的CGInterpolationQuality属性。因此,以下对您的代码段的更改对我有用:

UIGraphicsBeginImageContextWithOptions([[UIApplication sharedApplication] keyWindow].bounds.size, NO, 0.0);
CGContextRef cgr = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(cgr, kCGInterpolationNone);
[self.view.layer renderInContext:cgr];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);