我正在对 a 的内容进行快照NSView
,应用 aCIFilter
并将结果放回视图中。如果CIFilter
是一种模糊形式,例如CIBoxBlur
或CIGuassianBlur
,则过滤后的结果会比原始结果略小。当我迭代地这样做时,结果变得越来越小,我想避免这种情况。
这里提到了这个问题,尽管上下文略有不同(Quartz Composer)。AppleFunHouse
演示应用程序应用 aGuassian blur
而不缩小图像,但我还没有弄清楚这个应用程序是如何做到的(它似乎正在使用OpenGL
我不熟悉的)。
这是代码的相关部分(在NSView
子类中)
NSImage* background = [[NSImage alloc] initWithData:[self dataWithPDFInsideRect:[self bounds]]];
CIContext* context = [[NSGraphicsContext currentContext] CIContext];
CIImage* ciImage = [background ciImage];
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"
keysAndValues: kCIInputImageKey, ciImage,
@"inputRadius", [NSNumber numberWithFloat:10.0], nil];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result
fromRect:[result extent]];
NSImage* newBackground = [[NSImage alloc] initWithCGImage:cgImage size:background.size];
如果我尝试使用不会移动像素的变色滤镜,例如CISepiaTone
,则不会发生收缩。
我想知道是否有不涉及潜入的快速修复openGL
?