UIView
私はいくつかの黒と白を含む非常に単純なものを持っていUIImageView
ます。デバイスの物理ボタンを使用してスクリーンショットを撮ると、結果として得られる画像は、(予想どおり) 私が見ているものとまったく同じに見えます。画像をピクセル レベルで調べると、白黒だけになります。
ただし、次のコード スニペットを使用して同じアクションをプログラムで実行すると、結果の画像にアンチエイリアシングが適用されたように見えます。すべての黒いピクセルがかすかな灰色のハローに囲まれています。元のシーンにはグレーはありません。純粋な白黒で、「スクリーンショット」画像の寸法はプログラムで生成したものと同じですが、グレーのハローがどこから来ているのかわかりません。
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);
2 つの異なる出力のサンプルを次に示します。左側は私のコードが生成するもので、右側は通常の iOS スクリーンショットです。
私の出力をrenderInContext
モノクロプリンターに送信しようとしているので、灰色のピクセルがあると、プリンターのディザリングアルゴリズムが原因で、見苦しいアーティファクトが発生します。
では、実際のデバイスのスクリーンショットと同じピクセル レベルのビューの出力を生成するにはどうすればよいrenderInContext
でしょうか? つまり、元のシーンと同じように白黒だけで表示されるのでしょうか?