Tag: 核心图像

使用Core映像进行过滤时内存泄漏

所以我一直在使用核心图像在图像上应用滤镜,除了当我尝试重复应用相同的滤镜,应用程序退出时,一切都很好,我猜测它是内存泄漏。 代码如下: -(UIImage *) applyFilter: (UIImage*) picture { UIImageOrientation originalOrientation = picture.imageOrientation; CGFloat originalScale = picture.scale; CIImage *beginImage = [CIImage imageWithCGImage:picture.CGImage]; CIContext *context = [CIContext contextWithOptions:nil]; CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues: kCIInputImageKey, beginImage, @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; CIImage *outputImage = [filter outputImage]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; UIImage *newImg = [UIImage imageWithCGImage:cgimg […]

将CIFiler应用于图像的蒙版部分

我正在寻找一种方法来将CIFilter应用于由掩码定义的图像的一部分。 像这样的东西,给一个图像: 来源http://imageshack.us/scaled/landing/213/browserpreviewtmp1p.jpg 还有一个面具: 我申请了一些变化 CIFilter *filter = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage,@"inputSaturation", @0, @"inputContrast", @1, @"inputBrightness", @0, nil]; 得到这个: 结果http://imageshack.us/a/img689/5297/browserpreviewtmpd.jpg 我怎样才能做到这一点?

核心图像:使用CICrop后,应用合成filter不排队

我正在使用CICrop通过切断图像的顶部和底部来裁剪图像到一定的大小。 之后,我应用CIMultiplyCompositing滤镜之类的东西,将裁剪的图像与其他图像组合在一起。 两幅图像的大小相同,但结果显示两幅图像没有alignment。 所以,我检查了以下内容: NSLog(@"image after crop: %g, %g, %g, %g", imageToFilter.extent.origin.x, imageToFilter.extent.origin.y, imageToFilter.extent.size.width, imageToFilter.extent.size.height); NSLog(@"second image: %g, %g, %g, %g", secondImage.extent.origin.x, secondImage.extent.origin.y, secondImage.extent.size.width, secondImage.extent.size.height); 这显示裁剪图像的origin.y有我看到的偏移量(使用CICrop的结果): image after crop: 0, 136, 3264, 2176 second image: 0, 0, 3264, 2176 那么,有没有办法让我重置裁剪图像“范围”rect,以使origin.y为零? 检查CIImage的文档,“extent”是一个只读属性。 或者我将不得不做一些非常低效的转换到另一个图像types/原始数据,然后返回到CIImage? 感谢您的任何build议。

使用GPU(可能CIFilters)将图像放在较大的canvas上,而不使用Image Context

比方说,我有一个100×100的图像。 我想将图像放置到500×500的较大的canvas上。 我目前的做法是使用UIGraphics创build一个Context,然后将图像绘制到上下文中。 UIGraphics.BeginImageContext(….); ImageView.Draw (….); 这很好,但不像我希望的那样快。 我注意到CIFilters速度非常快。 有没有一种方法可以使用CIFilters或使用GPU而不是CPU的另一种方法在较大的canvas上放置图像? 我已经用CIFilters CICrop和CIPerspectiveTransform进行了实验,但似乎无法得到我想要的结果… 原始图片100×100 我想要的结果图像在500×500。 我只是想要使用CIFilters或某些GPU操作来增加图像大小。 我尝试使用CICrop做一个“反向作物”,但是这不起作用。 注意我指定了CIVector的大小为500×500,即使图像本身是100×100,结果图像完全忽略了额外的空间,如果closures,剪切。 这是我的代码: CICrop crop = new CICrop(); crop.Image = ImageView.Image.CGImage; crop.Rectangle = new CIVector(0, 0, 500, 500); ImageView.Image = new UIImage(crop.OutputImage); Console.WriteLine("ImageView.Image.size = "+ ImageView.Image.Size);

什么是“需要一个swizzler,使RGB8可以阅读”关于该核心图像给iOS9?

首先,我想了一个解决scheme,但这不是一个好的方法,我会在最后一个。 当我处理在iOS9filter我得到了“需要一个swizzler,使RGB8可以读取”的错误信息,并通过这种方法返回的图像是全黑的 [self.context createCGImage:self.outputImage fromRect:[self.outputImage extent]]; 在这里 – (UIImage *)fliterImage:(UIImage *)input flitername:(NSString *)name { NSString * fliter_name = name; self.context = [CIContext contextWithOptions:nil]; UIImage *image; if ([fliter_name isEqualToString:@"OriginImage"]){ image = input; }else { self.ciImage = [[CIImage alloc] initWithImage:input]; self.filter = [CIFilter filterWithName:fliter_name keysAndValues:kCIInputImageKey,self.ciImage, nil]; [self.filter setDefaults]; self.outputImage = [self.filter outputImage]; // here give the error […]

UIGraphicsBeginImageContext必须是视网膜感知?

我读过一些推荐使用的post: UIGraphicsBeginImageContextWithOptions((image.size), NO, 0.0f) 代替: UIGraphicsBeginImageContext(image.size). 因为第一个绘图时使用视网膜缩放,否则你会得到块状图像。 我对使用或不使用视网膜的选项有些困惑。 如果我有一个1000×1000像素的照片,我调用UIGraphicsBeginImageContext传递这些尺寸,我没有具体指定我要绘制多less点? 这可以吗? 或者我应该调用UIGraphicsBeginImageContextWithOptions传递一半的尺寸(500x500px)? 它有什么区别?

CoreImage的内存泄漏

我已经创build了如下的模糊图像: //Blur the UIImage CIImage *imageToBlur = [CIImage imageWithCGImage:viewImage.CGImage]; CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"]; [gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"]; [gaussianBlurFilter setValue:[NSNumber numberWithFloat: 2] forKey: @"inputRadius"]; CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"]; CIImage *finalImage = [resultImage imageByCroppingToRect:CGRectMake(0, 10, self.view.bounds.size.width, self.view.bounds.size.height)]; //create UIImage from filtered image UIImage *blurrredImage = [[UIImage alloc] initWithCIImage:finalImage]; CIFilter *colorMatrixFilter = [CIFilter filterWithName:@"CIColorMatrix"]; […]

用于Core Image的CIGaussianGradientfilter的示例

我正在寻找iOS的这个核心图像filter的代码示例。 那些在inputImage参数中的filter,我可以搞清楚如何实现。 但没有inputImage参数,我不知道它是如何工作的。 以下是苹果公司的文档摘录: CIGaussianGradient 使用高斯分布生成从一种颜色到另一种颜色的渐变。 参数 inputCenter A CIVector class whose attribute type is CIAttributeTypePosition and whose display name is Center. Default value: [150 150] Identity: (null) inputColor0 A CIColor class whose display name is Color 1. inputColor1 A CIColor class whose display name is Color 2. inputRadius An NSNumber class whose attribute type […]

将核心图像滤镜(CIBumpDistortion)应用于图像的一个部分+改变CIFilter的select和强度的半径

我想复制这里显示的一些function: 所以我希望用户将CIBumpDistortionfilter应用于图像,并让他select 1)正是他想要通过让他刚刚触摸图像上的相应位置来应用它 2a)圆圈select的大小(上图中的第一个滑块) 2b)CIBumpDistortionfilter的强度(上图中的第二个滑块) 我阅读了一些以前提出的问题,但是它们并没有真正的帮助,其中一些解决scheme听起来非常友好(例如剪切需要的部分,然后重新应用到旧的图像)。 希望我一次不要求太多。 Objective-C将是首选,但任何帮助/提示将非常感激! 先谢谢你!

当向UIImage应用filter时,结果是颠倒的

这真让我烦恼。 当我将UIImage转换为CIImage时,应用一个滤镜,然后将图像倒转(对于横向)或逆时针旋转90度(对于纵向)。 var image:UIImage? var index:Int? @IBOutlet weak var photo: UIImageView! @IBAction func editImage(sender: UIBarButtonItem) { println("editImage") let beginImage = CIImage(image: self.image) let filter = CIFilter(name: "CISepiaTone") filter.setValue(beginImage, forKey: kCIInputImageKey) filter.setValue(0.8, forKey: kCIInputIntensityKey) let newImage = UIImage(CIImage: filter.outputImage) self.photo.image = newImage }