[iOS] GameKit - Bluetoothを使った iOSデバイス間の通信 [2]画像の送受信

2010年12月10日金曜日 | Published in | 2 コメント

このエントリーをはてなブックマークに追加

[前回] Cocoaの日々: [iOS] GameKit - Bluetoothを使った iOSデバイス間の通信

今回は画像を送信してみた。

サンプル


画像が選ぶと...

こうなる。転送は2秒程度。


解説


まず送信部分。UIImagePickerController の扱いは割愛する。UIImage を送る部分だけピックアップした。
- (void)imagePickerController:(UIImagePickerController *)picker
 didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [picker dismissModalViewControllerAnimated:YES];
 
 UIImage* image = [info objectForKey:UIImagePickerControllerEditedImage];
 
 NSError* error = nil;
 NSData* data = UIImageJPEGRepresentation(image, 0.5);
 [self.session sendData:data
       toPeers:[NSArray arrayWithObject:self.peerID]
     withDataMode:GKSendDataReliable
      error:&error];
 if (error) {
  NSLog(@"%@", error);
 }
 
}
特別な工夫はなく UIImage を NSData に変換して送信しているだけ。

次に受信部分。
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer
 inSession:(GKSession *)session context:(void *)context
{
  // image
  NSLog(@"received image");
  self.imageView.image = [UIImage imageWithData:data];
 }
}
これも工夫は無い。送られてきた NSData から UIImageを生成して表示しているだけ。

なお大きなサイズだとエラーが出ていた。
Error Domain=com.apple.gamekit.GKSessionErrorDomain Code=30202 "Send data error."
 UserInfo=0x570c1b0 {NSLocalizedFailureReason=AGPSessionSendTo failed (801C0001).,
 NSLocalizedDescription=Send data error.}
メモリが不足していたのでそれに関連してエラーが出たのかもしれない。


ソースコード


GitHub からどうぞ。
xcatsan/iOS-Sample-Code at 2010-12-10b - GitHub

Responses

  1. 匿名
    2011年5月12日 12:47

    画像ではなく動画の場合はどのようにNSDataに変換すればよいのでしょうか?

  2. 匿名
    2011年5月12日 12:47

    画像ではなく動画の場合はどのようにNSDataに変換すればよいのでしょうか?

  3. xcatsan says:
    2011年5月12日 21:57

    こんばんは。

    探してみると UIImagePickerController で動画を扱っている記事がいくつかありました。

    UIImagePickerControllerで動画の選択
    http://blog.suz-lab.com/2010/02/uiimagepickercontroller.html

    Recorded video from iphone 3gs
    http://sol3.typepad.com/tagalong_developer_journa/2009/07/recorded-video-from-iphone-3gs-.html

    これらによると動画も画像と同じように NSData として取得できそうです。

    (上記ページからの抜粋)
    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
    NSData *webData = [NSData dataWithContentsOfURL:videoURL];


    参考まで。

  4. xcatsan says:
    2011年5月12日 21:57

    こんばんは。

    探してみると UIImagePickerController で動画を扱っている記事がいくつかありました。

    UIImagePickerControllerで動画の選択
    http://blog.suz-lab.com/2010/02/uiimagepickercontroller.html

    Recorded video from iphone 3gs
    http://sol3.typepad.com/tagalong_developer_journa/2009/07/recorded-video-from-iphone-3gs-.html

    これらによると動画も画像と同じように NSData として取得できそうです。

    (上記ページからの抜粋)
    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
    NSData *webData = [NSData dataWithContentsOfURL:videoURL];


    参考まで。

Leave a Response

人気の投稿(過去 30日間)