簡體   English   中英

通過CIFilter傳遞UIImage會生成空白圖像

[英]Passing a UIImage through a CIFilter produces a blank image

我的應用程序將過濾器添加到選定的圖像。 該應用程序的工作方式如下:

  1. 從圖像選擇器中選擇圖像
  2. 圖像被加載為我的視圖控制器的ivar
  3. 按下按鈕將濾鏡添加到圖像

當我按下按鈕添加濾鏡時,主圖像視圖將完全變為白色。 但是,當我最初從選擇器加載圖像時,它顯示得很好。 這是添加過濾器的代碼。

- (IBAction)addFilter:(id)sender {
    if(_imageToFilter)
    {
        CIImage *newImage = _imageToFilter.CIImage;
        CIFilter *myFilter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:@"inputImage",newImage, nil];
        CIImage *filteredImage = [myFilter outputImage];
        UIImage *outputImage = [UIImage imageWithCIImage:filteredImage];
        [mainImage setImage:outputImage];

    }    
}

CIImage * inputImage被分配為nil可能是問題所在。 嘗試使用CIImage的initWithImage:而不是_imageToFilter.CIImage (有關以下編輯的更多信息):

-(IBAction)addFilter:(id)sender {
    if(_imageToFilter) {
      CIImage *inputImage = [[CIImage alloc] initWithImage:_imageToFilter];
      CIFilter *myFilter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:@"inputImage",newImage, nil];
      CIImage *filteredImage = [myFilter outputImage];
      UIImage *outputImage = [UIImage imageWithCIImage:filteredImage];
      [mainImage setImage:outputImage];
    }
}

編輯:根據評論的反饋,問題似乎是_imageToFilter.CIImage返回nil 來自docs :“如果UIImage對象是使用CGImageRef初始化的,則該屬性的值為nil。”

使用CIImage初始化方法initWithImage:使用UIImage初始化CIImage對象,從而解決了該問題。 其余代碼工作正常,因此我將其返回到原始的filterWithName:keysAndValues:,以專注於有問題的部分。 更多關於:這里的問題: 誰能告訴我為什么UIImage.ciimage為null

感謝您的反饋,希望答案能幫助OP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM