質問編集履歴

1 補足情報の追加

mottyan23

mottyan23 score 5

2016/01/15 13:53  投稿

UIColorの内容にアクセスできません
###前提・実現したいこと
撮影と同時に色情報を取り出すプログラムを組んでいます。
###発生している問題・エラーメッセージ
撮影した写真のUIImageから、色情報を抽出してUIColorで返す関数を使用したのですが、その中の数字にアクセスができません。
Value of type 'UIColor' has no member 'red'
という風にredが存在しませんとエラーメッセージが出るのですが、何故でしょうか。
###ソースコード
```swift
import UIKit
import AVFoundation
let pixelDataByteSize = 4
extension UIImage {
   
   func getColor(pos: CGPoint) -> UIColor {
       
       let imageData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
       let data : UnsafePointer = CFDataGetBytePtr(imageData)
       let scale = UIScreen.mainScreen().scale
       let address : Int = ((Int(self.size.width) * Int(pos.y * scale)) + Int(pos.x * scale)) * pixelDataByteSize
       let r = CGFloat(data[address])
       let g = CGFloat(data[address+1])
       let b = CGFloat(data[address+2])
       let a = CGFloat(data[address+3])
       
       return UIColor(red: r, green: g, blue: b, alpha: a)
   }
}
class ViewController: UIViewController {
   
   @IBOutlet weak var textBox: UILabel!
   @IBOutlet weak var startTakePhoto: UIButton!
   // 画像のアウトプット
   var myImageOutput:AVCaptureStillImageOutput!
   
   override func viewDidLoad() {
       super.viewDidLoad()
       // セッションの作成
       let mySession = AVCaptureSession()
       //解像度の指定
       mySession.sessionPreset = AVCaptureSessionPresetLow
       
       // 撮影に使うカメラ
       var myCamera:AVCaptureDevice!
       //デバイス一覧の取得
       let devices = AVCaptureDevice.devices()
       for device in devices{
           // フロントカメラで撮影する
           if(device.position == AVCaptureDevicePosition.Front){
               myCamera = device as! AVCaptureDevice
           }
           
       }
       
       // カメラからVideoInputを取得する
       do {
           // 入力元
           let videoInput = try AVCaptureDeviceInput(device: myCamera)
           mySession.addInput(videoInput)
           
           // 出力先
           myImageOutput = AVCaptureStillImageOutput()
           mySession.addOutput(myImageOutput)
           
           // 画像を表示するプレビューレイヤを作る
           let myVideoLayer = AVCaptureVideoPreviewLayer(session: mySession)
           myVideoLayer.frame = view.bounds
           myVideoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
           // 最背面になるようにプレビューレイヤを挿入する
           view.layer.insertSublayer(myVideoLayer, atIndex: 0)
           
           // セッション開始
           mySession.startRunning()
           
       } catch let error as NSError {
           print("カメラは使えません。\(error)")
       }
       
   }
   
   @IBAction func startTakePhoto(sender: UIButton) {
       // ビデオ出力に接続する
       let myAVConnection = myImageOutput.connectionWithMediaType(AVMediaTypeVideo)
       
       // 接続から画像を取得する
       myImageOutput.captureStillImageAsynchronouslyFromConnection(myAVConnection, completionHandler: { (imageDataBuffer, error) -> Void in
           // ビデオ画像をキャプチャする
           let myImageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer)
           let stillImage = UIImage(data: myImageData)
           
           //stillImageの指定座標の色情報を取り出す
           let pixelColor = stillImage!.getColor(CGPointMake(100,100))
           
//ここから下3行でエラーが出てきます
           let myRed  = pixelColor.red
           let myGreen = pixelColor.green
           let myBlue = pixelColor.blue
           
           
           textBox.text = "赤 \(myRed)"
               //カメラロールに追加する
           UIImageWriteToSavedPhotosAlbum(stillImage!, self, nil, nil)
       })
       }
   
}
```
###補足情報(言語/FW/ツール等のバージョンなど)
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境はXcode7 IOS9.1で開発をしています。
  • Swift 2

    1339 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る