2017-08-09 20 views
0

こんにちは、私はギャラリーから画像を選択して画像を切り抜いて、一部のフォルダに画像を保存します。ギャラリーから画像を選んで、画像を保存し、画像をxamarinのプロフィール画像として保存します。android

この点

enter code here 

ます。private void ProfilePic_Click(オブジェクト送信者、EventArgsの電子) { 新しいテント(=インテント)で私を助けてください。

 Intent.SetType("image/*"); 
     Intent.SetAction(Intent.ActionGetContent); 
     StartActivityForResult(Intent.CreateChooser(Intent, "EZ-Gift Profile Pic"), PickImageId); 
    } 


    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
    { 
     if ((requestCode == PickImageId) && (resultCode == Result.Ok) && (data != null)) 
     { 
      Android.Net.Uri uri = data.Data; 
      //Toast.MakeText(this, path, ToastLength.Long).Show(); 
      Toast.MakeText(this, uri.ToString(), ToastLength.Long).Show(); 

      ProfilePic.SetImageURI(uri); 

      string path = GetPathToImage(data.Data); 

      edit = prefs.Edit(); 
      edit.PutString("ProfilePicUri", uri.ToString()); 
      Toast.MakeText(this, uri.ToString(), ToastLength.Long).Show(); 
      Toast.MakeText(this, path, ToastLength.Long).Show(); 


     } 
    } 
    private string GetPathToImage(Android.Net.Uri contentURI) 
    { 
     ICursor cursor = ContentResolver.Query(contentURI, null, null, null, null); 
     cursor.MoveToFirst(); 
     string documentId = cursor.GetString(0); 
     documentId = documentId.Split(':')[1]; 
     cursor.Close(); 

     cursor = ContentResolver.Query(
     Android.Provider.MediaStore.Images.Media.ExternalContentUri, 
     null, MediaStore.Images.Media.InterfaceConsts.Id + " = ? ", new[] { documentId }, null); 
     cursor.MoveToFirst(); 
     string path = cursor.GetString(cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data)); 
     cursor.Close(); 

     return path; 
    } 

答えて

0

次のコードを追加して画像をトリミングします。OnActivityResultコードを変更してください。このようにしてください。これがあなたを助けることを願っています。

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
     { 
      if ((requestCode == PickImageId) && (resultCode == Result.Ok) && (data != null)) 
      { 
       Android.Net.Uri uri = data.Data; 
       //Toast.MakeText(this, path, ToastLength.Long).Show(); 
       Toast.MakeText(this, uri.ToString(), ToastLength.Long).Show(); 

       // It will crop the image accordingly. 
       cropPicture(uri); 

       string path = GetPathToImage(data.Data); 

       Toast.MakeText(this, uri.ToString(), ToastLength.Long).Show(); 
       Toast.MakeText(this, path, ToastLength.Long).Show(); 


      } 
      else if(requestCode == CROP_PIC) 
      { 
       // Get your cropped image here using Bundle and save the bitmap in particular location. 
      } 
     } 

private void cropPicture(Android.Net.Uri picUri) 
     { 
      try 
      { 
       // call the standard crop action intent (the user device may not 
       // support it) 
       Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
       // indicate image type and Uri 
       cropIntent.SetDataAndType(picUri, "image/*"); 
       // set crop properties 
       cropIntent.PutExtra("crop", "true"); 
       // indicate aspect of desired crop 
       cropIntent.PutExtra("aspectX", 2); 
       cropIntent.PutExtra("aspectY", 1); 
       // indicate output X and Y 
       cropIntent.PutExtra("outputX", 256); 
       cropIntent.PutExtra("outputY", 256); 
       // retrieve data on return 
       cropIntent.PutExtra("return-data", true); 
       // start the activity - we handle returning in onActivityResult 
       StartActivityForResult(cropIntent, CROP_PIC); 
      } 
      // respond to users whose devices do not support the crop action 
      catch (ActivityNotFoundException anfe) 
      { 
       Toast toast = Toast 
         .MakeText(this, "This device doesn't support the crop action!", ToastLength.Long); 
       toast.Show(); 
      } 
     } 
関連する問題