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