我正在尝试获取C4图像的像素颜色,如何访问图像颜色矩阵? c4框架

时间:2012-05-08 19:10:00

标签: c4

在对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

有没有办法获取各种颜色矢量的数据值?

1 个答案:

答案 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);
}

这就是我将如何应用我提到的其他帖子中的技术。