【问题标题】:how to properly apply Core Image filter如何正确应用核心图像过滤器
【发布时间】:2012-06-24 07:20:51
【问题描述】:

我在使用 Core 图像时遇到了问题。我正在做的是从 UIImageView 获取图像,然后使用我在教程中找到的一些代码(我是核心图像的新手),但是当我尝试时,我想将棕褐色图像放回同一个 UIImageView将新图像放入视图中它就会消失我已经测试过图像视图是否包含图像并且它确实包含但它不可见。有什么建议吗?

编辑: 好吧,我让棕褐色过滤器工作了,所以我尝试了色调分离,我遇到了同样的问题,图像就消失了。代码如下:

CIImage *beginImage = [CIImage imageWithCGImage:[image_view.image CGImage]];
context = [CIContext contextWithOptions:nil];
filter = [CIFilter filterWithName:@"CIColorPosterize" keysAndValues:kCIInputImageKey, beginImage,@"inputLevels",[NSNumber numberWithFloat:0.8], nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
[image_view setImage:newImg];
CGImageRelease(cgimg);

【问题讨论】:

  • 发布你到目前为止的代码!!!
  • iOS SDK 中缺少 CoreImage 过滤器。我相信posterize就是其中之一。 Google for iOS 支持 CoreImage 过滤器的支持列表。

标签: iphone objective-c ios ios5 core-image


【解决方案1】:

Xcode 8.2 上的 Swift 3.0 中的相同代码(我在项目中的 imageView 是“@IBOutlet var photoImageView : UIImageView!”) 在 iPhone 7Plus 设备 iOS 10 上检查成功

    guard let myImageView = self.photoImageView.image else
    {
        return
    }
    guard let cg = myImageView.cgImage else
    {
        return
    }
    let beginImage = CIImage(cgImage: cg)
    let context : CIContext = CIContext(options: nil)
    let inputParams : [String : Any]? = [kCIInputImageKey : beginImage,
                                        "inputIntensity" : NSNumber(value : 0.8)]
    let filter : CIFilter = CIFilter(name: "CISepiaTone", withInputParameters: inputParams)!
    let outputImage : CIImage? = filter.outputImage!

    if let outputImage = outputImage
    {
        let cgImage : CGImage? = context.createCGImage(outputImage, from: outputImage.extent)!

        if let cg = cgImage
        {
            let newImage : UIImage = UIImage(cgImage: cg)
            photoImageView.image = newImage
        }
    }

【讨论】:

    【解决方案2】:

    尝试这样的事情(假设你有一个 UIImageView *myImageView)

    CIImage *beginImage = [CIImage imageWithCGImage:[myImageView.image 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];
    
    [myImageView setImage:newImg];
    
    CGImageRelease(cgimg);
    
    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多