2
以下のコードでは、CGContextDrawImage()ペイントレイヤーの品質が元の表示レイヤーよりも低くなっています。イメージの一部の行にエイリアスがあります。画面レイヤーから取ったCGImageRefの品質を改善するにはどうすればいいですか?
は、ここに私のコード
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
CGContextSaveGState(ctx);
UIGraphicsBeginImageContext(layer.bounds.size);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetShouldAntialias(c, YES);
CGContextSetAllowsAntialiasing(c, YES);
CGContextSetInterpolationQuality(c, kCGInterpolationHigh);
[self.view.layer renderInContext:c];
CGImageRef image = CGBitmapContextCreateImage(c);
UIGraphicsEndImageContext();
CGImageRef flipImage = CGImageCreateWithImageInRect(image, layer.bounds);
CGContextTranslateCTM(ctx, 0, layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0f, -1.0f);
CGContextSetShouldAntialias(ctx, YES);
CGContextSetAllowsAntialiasing(ctx, YES);
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
CGContextDrawImage(ctx, layer.bounds, flipImage);
CGContextRestoreGState(ctx);
LogMessage(@"drawLayer", 1, @"draw layer content");
}
アップデート1
drawLayer:
で塗装層の画面と異なるサイズを持っています。 画面を分割してアニメーションを適用したいと思っています。あなたが最初の場所での画像のコンテキストを開くのはなぜ
新しいレイヤーのスケールは正しいです、私はいくつかの小さなレイヤーに画面をスライスする必要があります。 – changx
さて、私はすでにあなたに答えを与えました。 'UIGraphicsBeginImageContextWithOptions'を使用してください。あなたのアプローチはまだ意味をなさない。スクリーンをスライスするために別のレイヤーが必要なのはなぜですか? –
はい、あなたは正しいです!直接 '[self.view.layer renderInContext:ctx]'は、作成、作物、描画タスクを完了することができますが、品質はまだ悪い、任意のアイデア?私はいくつかのサブレイヤが必要な理由は、各サブレイヤはその下のレイヤを公開するために下にフリップされます。 – changx