内容简介:翻译自:https://stackoverflow.com/questions/9472740/how-to-use-cicolormatrix-in-ios5
我试图找出如何改变UI Image
的颜色/色调.我发现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 教程相同的图像):
希望能帮助到你.
翻译自:https://stackoverflow.com/questions/9472740/how-to-use-cicolormatrix-in-ios5
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。