程序化的截图歪曲最近

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

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/

感谢您的任何帮助!


如果问题仍然相关。

我会认为插值是你在上下文中绘制的对象中设置的东西,但似乎上下文本身做了一些插值,它具有属性CGInterpolationQuality与getter和setter。 所以,以下更改为您的代码段适用于我:

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);
链接地址: http://www.djcxy.com/p/11687.html

上一篇: programmatic screenshot misrepresenting nearest

下一篇: Using ViewPager with native Fragments