我正在对 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?