' contextWithCGContext:options: '方法的目的是什么?



我将CIContext视为一种抽象状态收集器,其目的是允许CIFilters发挥作用。

但有+[CIContext contextWithCGContext:options:]函数接受CGContextRef作为输入。

这是什么意思?如果这个CGContextRef已经包含了一些图形,那么它将如何在新创建的CIContext中使用?

CGContextRef的内容是否会对CIFilters产生影响?

是否可以将CIFilters产生的CIImages输出到初始的CGContextRef中?

这是什么意思?如果这个CGContextRef已经包含了一些图形,那么它将如何在新创建的CIContext中使用?

CIContext可以由CGContext支持,并用于在上下文内容的顶部绘制过滤后的数据。

是否可以将CIFilters产生的CIImages输出到这个初始的CGContextRef中?

(几乎)任何UIView类设置CGContext前不久调用drawRect:方法,如果你不打算产生一个UIImage/CIImage对象,而只是想覆盖这个方法,并绘制你的过滤器的结果,你可以得到使用-[CIContext drawImage:inRect:fromRect:],以便渲染你的(例如过滤)数据到这个视图的上下文中:

- (void)drawRect:(CGRect)rect {
CIContext *context = [CIContext contextWithCGContext:UIGraphicsGetCurrentContext() options:nil];
CIImage *input = self.image.CIImage;
CIFilter *filter = [[self class] makeFilter];
[filter setValue:input forKey:kCIInputImageKey];
[context drawImage:filter.outputImage
inRect:rect
fromRect:filter.outputImage.extent];
}

CGContextRef的内容是否会对CIFilters产生影响?

不完全正确,处于隔离状态的CIFilters对象不会受到当前活动的CGContext状态的任何副作用的影响。但是,如果CGContext本身有任何转换,它当然不会被丢弃:

- (void)drawRect:(CGRect)rect {
CGContextRef cgContext = UIGraphicsGetCurrentContext();
CGContextRotateCTM(cgContext, radians(-45.));
CIContext *context = [CIContext contextWithCGContext:cgContext options:nil];
... Applies CIFilter sequence ...

// The result will be both filtered and rotated by 45 degrees counterclockwise
[context drawImage:filter.outputImage
inRect:rect
fromRect:filter.outputImage.extent];
}

相关内容

  • 没有找到相关文章

最新更新