CALayer 的 magnificationFilter 在 OS X 上被忽略
CALayer's magnificationFilter being ignored on OS X
我在 OS X 中有一个 CALayer,它的放大倍率和放大倍率过滤器设置如下所示,但无论层的大小如何,似乎都会使用放大倍率设置。
layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;
三线性过滤在图层较小时起作用,但当放大时,图层是用看起来像线性的+最大mipmap级别绘制的,而不是最近的邻居。作为测试,我将放大过滤器设置为 kCAFilterNearest,这会导致它在所有比例级别上使用 kCAFilterNearest 进行渲染 - 因此无论绘制的图层大小如何,似乎都在使用 magnificationFilter。
我在 iOS 上尝试了相同的代码,它按预期工作,所以这一定是 OS X 渲染的一些怪癖。
完整代码:
@implementation MipView
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
NSImage *image = [NSImage imageNamed:@"image"];
CALayer *layer = [CALayer layer];
layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;
layer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
layer.contents = (__bridge id _Nullable)[image CGImageForProposedRect:NULL context:nil hints:nil];
[self setLayer:[CALayer layer]];
[self setWantsLayer:YES];
[self.layer addSublayer:layer];
return self;
}
- (IBAction)slider:(id)sender {
self.layer.sublayerTransform = CATransform3DMakeScale([sender doubleValue], [sender doubleValue], 1);
}
@end
有没有办法让Core Animation在图层放大时使用放大滤镜值?
这是 OS X 中的一个错误。核心动画工程师似乎正在研究它,但从 maxOS Sierra beta 5
开始还没有修复它
我在 OS X 中有一个 CALayer,它的放大倍率和放大倍率过滤器设置如下所示,但无论层的大小如何,似乎都会使用放大倍率设置。
layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;
三线性过滤在图层较小时起作用,但当放大时,图层是用看起来像线性的+最大mipmap级别绘制的,而不是最近的邻居。作为测试,我将放大过滤器设置为 kCAFilterNearest,这会导致它在所有比例级别上使用 kCAFilterNearest 进行渲染 - 因此无论绘制的图层大小如何,似乎都在使用 magnificationFilter。
我在 iOS 上尝试了相同的代码,它按预期工作,所以这一定是 OS X 渲染的一些怪癖。
完整代码:
@implementation MipView
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
NSImage *image = [NSImage imageNamed:@"image"];
CALayer *layer = [CALayer layer];
layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;
layer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
layer.contents = (__bridge id _Nullable)[image CGImageForProposedRect:NULL context:nil hints:nil];
[self setLayer:[CALayer layer]];
[self setWantsLayer:YES];
[self.layer addSublayer:layer];
return self;
}
- (IBAction)slider:(id)sender {
self.layer.sublayerTransform = CATransform3DMakeScale([sender doubleValue], [sender doubleValue], 1);
}
@end
有没有办法让Core Animation在图层放大时使用放大滤镜值?
这是 OS X 中的一个错误。核心动画工程师似乎正在研究它,但从 maxOS Sierra beta 5
开始还没有修复它