我将CIContext
视为一种抽象状态收集器,其目的是允许CIFilter
s发挥作用。
但有+[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
产生影响?
不完全正确,处于隔离状态的CIFilter
s对象不会受到当前活动的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];
}