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