作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试了解如何更改 UIImage 的颜色/色调。我发现 iOS5 有很多图像滤镜,但我很难找到有关正确使用 CIColorMatrix
滤镜的文档。
-(void)doCIColorMatrixFilter
{
//does not work, returns nil image
CIImage* inputImage = [CIImage imageWithCGImage:[[UIImage imageNamed:@"button.jpg"]CGImage]];
CIFilter *myFilter;
NSDictionary *myFilterAttributes;
myFilter = [CIFilter filterWithName:@"CIColorMatrix"];
[myFilter setDefaults];
myFilterAttributes = [myFilter attributes];
[myFilterAttributes setValue:inputImage forKey:@"inputImage"];
//How to set up attributes?
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *ciimage = [myFilter outputImage];
CGImageRef cgimg = [context createCGImage:ciimage fromRect:[ciimage extent]];
UIImage *uimage = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp];
[imageView setImage:uimage];
CGImageRelease(cgimg);
}
什么代码进入这个过滤器的字典?
最佳答案
一个月后……
这是CIColorMatrix
设置所有参数的例子:)
-(void)doCIColorMatrixFilter
{
// Make the input image recipe
CIImage *inputImage = [CIImage imageWithCGImage:[UIImage imageNamed:@"facedetectionpic.jpg"].CGImage]; // 1
// Make the filter
CIFilter *colorMatrixFilter = [CIFilter filterWithName:@"CIColorMatrix"]; // 2
[colorMatrixFilter setDefaults]; // 3
[colorMatrixFilter setValue:inputImage forKey:kCIInputImageKey]; // 4
[colorMatrixFilter setValue:[CIVector vectorWithX:1 Y:1 Z:1 W:0] forKey:@"inputRVector"]; // 5
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"]; // 6
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"]; // 7
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; // 8
// Get the output image recipe
CIImage *outputImage = [colorMatrixFilter outputImage]; // 9
// Create the context and instruct CoreImage to draw the output image recipe into a CGImage
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; // 10
// Draw the image in screen
UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:cgimg]];
CGRect f = imageView2.frame;
f.origin.y = CGRectGetMaxY(imageView.frame);
imageView2.frame = f;
[self.view addSubview:imageView2];
}
这就是示例的作用:
在 1
中,我们创建了 ciimage,如果您在那里得到的是 nil,请确保您传递的是正确的 UIImage/CGImage 或路径。
在2
中创建过滤器,你知道的:)
在 3
中将过滤器参数设置为默认值,CoreImage 编程指南建议我们应该这样做(如果避免的话,我没有尝试过任何奇怪/不好的事情。)
在4
中设置输入ciimage
从 5
到 8
我们设置参数。例如,我制作了红色矢量 {1,1,1,0},因此图像看起来偏红。 6
、7
和 8
在这里不是必需的,因为它们的值与默认值相同(记住我们调用了 -setDefaults
?) 但出于教育目的,我想它们很好:)
在 9
中设置输出图像,虽然还没有绘制。
最后,在 10
中,您告诉 CoreImage 将输出图像绘制到 CGImage 中,我们将该 CGImage 放入 UIImage 中,并将其放入 UIImageView 中。
这是结果(我使用了与 this 教程相同的图像):
希望对您有所帮助。
关于iphone - 如何在iOS5中使用CIColorMatrix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472740/
我是一名优秀的程序员,十分优秀!