在对color colorMatrix的讨论中:偏见:
此滤镜执行矩阵乘法,如下所示,以变换颜色矢量:
s.r = dot(s,redVector)s.g = dot(s,greenVector)s.b = dot(s,blueVector)s.a = dot(s,alphaVector)s = s + bias
有没有办法获取各种颜色矢量的数据值?
答案 0 :(得分:1)
您在C4文档中提到的讨论是指过滤器用于计算矩阵乘法的过程。这实际上只是描述了滤镜在应用时对图像中的颜色所做的操作。
事实上,幕后发生的事情是colorMatrix:
方法设置了一个名为CIFilter
的{{1}}并将其应用于CIColorMatrix
。很遗憾,Apple不提供C4Image
过滤器的源代码。
所以,对你的问题的回答是:
您无法通过CIColorMatrix
过滤器访问C4Image
中像素的颜色分量。但是,CIColorMatrix
类有一个名为C4Image
的属性(例如CGImage
),可用于获取像素数据。
可以找到一个好的,简单的技术HERE
编辑: 昨晚我对这个问题很着迷,并将这两个方法添加到C4Image类中:
加载像素数据的方法:
yourC4Image.CGImage
访问像素颜色的方法:
-(void)loadPixelData {
NSUInteger width = CGImageGetWidth(self.CGImage);
NSUInteger height = CGImageGetHeight(self.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
bytesPerPixel = 4;
bytesPerRow = bytesPerPixel * width;
rawData = malloc(height * bytesPerRow);
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), self.CGImage);
CGContextRelease(context);
}
这就是我将如何应用我提到的其他帖子中的技术。