我有一个非常简单UIView
的包含几个黑白UIImageView
的s。如果我通过设备上的物理按钮截取屏幕截图,生成的图像看起来与我看到的完全一样(如预期的那样) - 如果我在像素级别检查图像,它只是黑白的。
但是,如果我使用以下代码片段以编程方式执行相同的操作,则生成的图像似乎应用了抗锯齿 - 所有黑色像素都被微弱的灰色光晕包围。我的原始场景中没有灰色——它是纯黑白的,“屏幕截图”图像的尺寸与我以编程方式生成的图像相同,但我似乎无法弄清楚灰色光晕的来源。
UIView *printView = fullView;
UIGraphicsBeginImageContextWithOptions(printView.bounds.size, NO, 0.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[printView.layer renderInContext:ctx];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
UIGraphicsEndImageContext();
我尝试在调用之前添加以下内容renderInContext
以防止抗锯齿,但它没有明显的效果:
CGContextSetShouldAntialias(ctx, NO);
CGContextSetAllowsAntialiasing(ctx, NO);
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
这是两个不同输出的示例 - 左侧是我的代码生成的,右侧是正常的 iOS 屏幕截图:
由于我试图将我的输出发送renderInContext
到单色打印机,因此由于打印机的抖动算法,灰色像素会导致一些难看的伪影。
那么,我怎样才能renderInContext
产生与真实设备屏幕截图相同的像素级输出 - 即,与原始场景中的一样只是黑白?