我正在尝试使用CGContextDrawImage(...)创建一个可以绘制大部分(例如2048 x 1537)图像的对象。它工作得很好,除了它非常模糊。我正在使用一个“drawingController”来覆盖drawLayer:inContext:喜欢这个
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
CGImageRef drawImage = CGImageRetain(imageToDraw);
if(drawImage) {
CGRect drawRect = CGRectMake(0, 0, 1024, 748);//Just hard coded to my window size for now.
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
CGContextDrawImage(ctx, drawRect, drawImage);
}
CGImageRelease(drawImage);
}
这就是我设置自定义图片托管视图的方式:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"large" ofType:@"jpg"];
CGImageRef imageRef = [self createCGImageFromFilePath:filePath];
drawingController = [[DrawingLayerController alloc] init];
drawingController.imageToDraw = imageRef;
[self setWantsLayer:YES];
imageLayer = [[CALayer alloc] init];
imageLayer.frame = self.bounds;
imageLayer.drawsAsynchronously = YES;
imageLayer.delegate = drawingController;
[self.layer addSublayer:imageLayer];
imageLayer.contentsRect = CGRectMake(0.5, 0.265452179, 0.5, 0.486662329); //Just an example contents rect.
imageLayer.drawsAsynchronously = YES;
[imageLayer setNeedsDisplay];
[imageLayer displayIfNeeded];
}
return self;
}
以下是在预览中打开的类似缩放比例下沿源图像生成的图像的一部分,因此您可以看到图像与源图像相比的模糊程度。
正如您所看到的,我的代码生成的图像看起来很可怕。这是怎么回事?
另外,为了完整起见,我尝试使用CATiledLayer作为我的imageLayer。生成的图像看起来非常糟糕。
最后一点:代码需要与iOS和OSX兼容,但我正在OSX上进行所有测试。
编辑:感谢@Andrea,我在上面添加了以下CGContextDrawImage(...)CGFloat scale = MAX(1,MAX(CGImageGetWidth(drawImage)/drawRect.size.width,CGImageGetHeight(drawImage)/drawRect.size.height));
layer.contentsScale = scale;