2010年4月22日木曜日

写真/カメラ画像を取り込もう。

  写真アプリやカメラ画像(含む動画)を取り込むには、UIImagePickerControllerクラスとその親クラスのUIViewControllerクラスを使い、UIImageクラス等に表示するそうです。また、画像情報の縮小/切取りは、UIImagePickerControllerクラスで機能を指定すれば良く、さらに加工したいときは、UIGraphicsを使うようです。より高度が画像加工をするときは、ここでは触れませんが、UIKitではなくC言語APIのCore Graphicsフレームワークを使うそうです。
・サンプルコード(UIKIt のUIImagePickerControllerのリファレンスにあります)
     iPhoneCoreDataRecipes
     PhotoLocations
--------------------------------------------------
◆UIImagePickerControllerクラス iPhoneアプリで画像を扱う際に、既存のカメラで画像を取得したり、写真アプリから画像を選択する場合に使用するようです
ー sourceTypeプロパティ
Image Pickerがどのようなタイプの機能(Source)にアクセスするかを指定するには、sourceTypeプロパティを使うそうです。Typeはそれぞれ定数で決められており、次で指定します。
  • UIImagePickerControllerSourceTypePhotoLibrary  フォトライプラリ(デフォルト値)
  • UIImagePickerControllerSourceTypeCamera カメラ
  • UIImagePickerControllerSourceTypeSavedPhotosAlbum iPhoneの場合:カメラロール、iPod touchの場合:「Saved Photos」フォルダを開く
ー allowsImageEditingプロパティ
    Image Pickerによる「画像」の拡大縮小・切取り(クロップ)の可否を指定するには、このプロパティで指定するようです。
    ー +(BOOL)isSourceTypeAvailable:メソッド
    当該ソースタイプが動作している環境で使用可能かをチェックします。
    --------------------------------------------------
    ◆UIViewControllerクラス
    UIViewControllerクラスは、UIImagePickerControllerクラスの親クラスであり、イメージピッカーの表示にUIViewControllerのpresentModalViewController:animated:というメソッドを使用するそうです。
    -------------------------------------------------- 
    ◆Picker表示までのプロセス
    • 動作可能かチェック(isSourceTypeAvailable:)
    • UIImagePickerControllerのインスタンス化(UIImagePickerController* imagepick)
    • 初期化(imagepick=[[UIImagePickerController alloc] init])
    • 各プロパティを設定(imagepick.プロパティ = 値)
    • 自身をデリゲートとして設定(imagepick.delegate = self)
    ◆Picker表示後のプロセス
    • Pickerを隠す (self dismissModalViewControllerAnimated:YES
    • UIImagePickerControllerを使った写真の撮影が終了すると、デリゲートメソッドであるimagePickerController:didFinishPickingImage:editingInfo:が、呼び出される。
    • 上記引数のUIImageにある写真は、320x320(スクリーンサイズにマッチ)
    • オリジナルデータ上記引数の(NSDictionary)editingInfoを使う(1200x1600:カメラの場合)
    • editingInfoにはユーザの編集情報もあり、UIImagePickerControllerCorpRectで取り出す。
    • 取り出したデータは、UIImageViewクラスのimageプロパティで表示する

    0 件のコメント:

    コメントを投稿