2016-07-12 14 views
2

現在、私は現在素早く学習しています。現在、クラスを取得中です。サンプル画像にフィルターを適用して、パラメーターの画像上の特定の色の強度を変更し、変更した画像を返すコードを記述するように指示されています。私が書いたコードでinstaFilterプロセッサエラー - 返される関数に戻り値が返されない

は、最後の数行に、それは

は「UIImage」

私のクラスのコードを返すことが期待される機能でリターンを逃すというエラーを述べました:

import UIKit 


let image = UIImage(named: "sample")! 

class brightnessFilter { 

func increaseContrast(image: UIImage) -> UIImage{ 
    var rgbaImage = RGBAImage(image: image)! 

    let avgRed = 118 
    let avgGreen = 98 
    let avgBlue = 83 

    for y in 0..<rgbaImage.height { 
     for x in 0..<rgbaImage.width { 
      let index = y * rgbaImage.width + x 
      var pixel = rgbaImage.pixels[index] 
      let redLum = Int(pixel.red) - avgRed 
      let greenLum = Int(pixel.green) - avgGreen 
      let blueLum = Int(pixel.blue) - avgBlue 
      pixel.red = UInt8(max(min(255, avgRed + 2 * redLum), 0)) 
      pixel.blue = UInt8(max(min(255, avgBlue + 2 * blueLum), 0)) 
      pixel.green = UInt8(max(min(255, avgGreen + 2 * greenLum), 0)) 
      rgbaImage.pixels[index] = pixel 

     } 
    } 
    let newImage1 = rgbaImage.toUIImage()! 
    return (newImage1) 
    } 

} 

let test = brightnessFilter() 
let processedImg = test.increaseContrast(image) 


class redFilter { 


func increaseContrast(image: UIImage) -> UIImage{ 
    var rgbaImage = RGBAImage(image: image)! 

    let avgRed = 118 

    for y in 0..<rgbaImage.height { 
     for x in 0..<rgbaImage.width { 
      let index = y * rgbaImage.width + x 
      var pixel = rgbaImage.pixels[index] 
      let redDiff = Int(pixel.red) - avgRed 
      if (redDiff > 0) { 
       pixel.red = UInt8(max(0, min(255, avgRed + redDiff * 5))) 
       rgbaImage.pixels[index] = pixel 
      } 
     } 
     let newImage2 = rgbaImage.toUIImage()! 
     return (newImage2) 
    } 
    } 
} 

let test2 = redFilter() 

RGBAクラス:

import UIKit 

public struct Pixel { 
public var value: UInt32 

public var red: UInt8 { 
    get { 
     return UInt8(value & 0xFF) 
    } 
    set { 
     value = UInt32(newValue) | (value & 0xFFFFFF00) 
    } 
} 

public var green: UInt8 { 
    get { 
     return UInt8((value >> 8) & 0xFF) 
    } 
    set { 
     value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF) 
    } 
} 

public var blue: UInt8 { 
    get { 
     return UInt8((value >> 16) & 0xFF) 
    } 
    set { 
     value = (UInt32(newValue) << 16) | (value & 0xFF00FFFF) 
    } 
} 

public var alpha: UInt8 { 
    get { 
     return UInt8((value >> 24) & 0xFF) 
    } 
    set { 
     value = (UInt32(newValue) << 24) | (value & 0x00FFFFFF) 
    } 
    } 
} 

答えて

0

メソッド宣言に戻り値が書き込まれる場合は、常に値が返されるようにする必要があります。

は、私はあなたのエラーは、次の方法であると信じて:

func increaseContrast(image: UIImage) -> UIImage { 
    var rgbaImage = RGBAImage(image: image)! 

    let avgRed = 118 
    let newImage2 = UIImage() //<-- Added   

    for y in 0..<rgbaImage.height { 
     for x in 0..<rgbaImage.width { 
      let index = y * rgbaImage.width + x 
      var pixel = rgbaImage.pixels[index] 
      let redDiff = Int(pixel.red) - avgRed 
      if (redDiff > 0) { 
       pixel.red = UInt8(max(0, min(255, avgRed + redDiff * 5))) 
       rgbaImage.pixels[index] = pixel 
      } 
     } 
     let newImage2 = rgbaImage.toUIImage()! 
     return (newImage2) //<---NOTICE 
    }// <---FIX 
    } 

お知らせreturn文は、常に値を返さない場合があります方法を意味し、forループであること。

修正:return文をコードに記されている中括弧の下に置きます。

追加:あなたはそのため、あなたは1つの

サイドノートを作成する必要があり、値を返さなければなりませんが:nil

+0

このような単純なミスを処理することを確認し、どのように不注意な私のは、そんなにありがとう! – Malickjay

関連する問題