2011-09-05 15 views
3

ギャラリーから写真を撮って、ImageViewで設定したいと思います。カメラから写真を撮り、同じ画像ビューに設定したいと思います。カメラから写真を撮りギャラリーから選択して画像表示

私はこれに非常に固執しています。

誰でも手伝ってもらえますか?

ありがとうございました。

+0

正確にあなたは立ち往生していますか? – Shafi

+0

カメラを使用して画像をクリックすると、アプリケーションでその画像を取得できません。 – anddev

+0

これを参照してくださいhttp://stackoverflow.com/questions/5991319/capture-image-from-camera-and-display-in-activity – Nepster

答えて

11

あなたはこの方法をクリックしてお使いのカメラのビューを処理することができます:あなたがイメージをキャプチャした後に戻ったときに

cameraImageView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
      startActivityForResult(intent, 0); 

     } 
    }); 

は、あなたの活動にこれを行います。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == 0) 
    { 
     if(data != null) 
     { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      photo = Bitmap.createScaledBitmap(photo, 80, 80, false); 
      imageView.setImageBitmap(photo); 
     } 
     else{ 
     } 
    } 
} 
+0

これは、少なくともKitkatのギャラリーから画像を取得することはできません。 –

3

ギャラリーのオープンソースコードを入手してください。画像を選択してオンクリックします。あなたの活動を開始するには、onclickにgenereratedされている意図を設定します。

アプリケーションでは、インテントデータを取得し、実際のパスを取得してデコードし、画像ビュー要素として設定します。

private String getRealPathFromURI(Uri contentUri) { 
    int columnIndex = 0; 

    String[] proj = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(contentUri, proj, null, null, null); 

    try { 
     columnIndex = cursor.getColumnIndexOrThrow 
         (MediaStore.Images.Media.DATA); 
    } catch (Exception e) { 
     Toast.makeText(ImageEditor.this, "Exception in getRealPathFromURI", 
         Toast.LENGTH_SHORT).show(); 
     finish(); 
     return null; 
    }  
    cursor.moveToFirst(); 
    return cursor.getString(columnIndex);    
} 
2

あなたはカメラやギャラリーから画像を取るために、このコードを実装する必要があります。ボタンのクリックイベントで

Take this variable : 

AlertDialog dialog; 
private static final int IMAGE_PICK = 1; 
private static final int IMAGE_CAPTURE = 2; 
private Bitmap profile_imageBitmap; 

if (v == btn_uploadPhoto) { 
    dialog.show(); 
    } 

次に、あなたの活動のOnCreateの方法で:

final String[] items = new String[] { "Take from camera", 
      "Select from gallery" }; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.select_dialog_item, items); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    builder.setTitle("Select Image"); 
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 

      if (item == 0) { 
       path = ""; 
       Intent intent = new Intent(
         "android.media.action.IMAGE_CAPTURE"); 
       File folder = new File(Environment 
         .getExternalStorageDirectory() + "/LoadImg"); 

       if (!folder.exists()) { 
        folder.mkdir(); 
       } 
       final Calendar c = Calendar.getInstance(); 
       String new_Date = c.get(Calendar.DAY_OF_MONTH) + "-" 
         + ((c.get(Calendar.MONTH)) + 1) + "-" 
         + c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR) 
         + "-" + c.get(Calendar.MINUTE) + "-" 
         + c.get(Calendar.SECOND); 

       path = String.format(
         Environment.getExternalStorageDirectory() 
           + "/LoadImg/%s.png", "LoadImg(" + new_Date 
           + ")"); 
       File photo = new File(path); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, 
         Uri.fromFile(photo)); 
       startActivityForResult(intent, 2); 

      } else { // pick from file 
       Intent intent = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       intent.setType("image/*"); 
       startActivityForResult(
         Intent.createChooser(intent, "Choose a Photo"), 
         IMAGE_PICK); 
      } 
     } 
    }); 

    dialog = builder.create(); 

Now Out Oncreateの:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == Activity.RESULT_OK && requestCode == IMAGE_PICK 
      || requestCode == IMAGE_CAPTURE) { 
     switch (requestCode) { 
     case IMAGE_PICK: 
      this.imageFromGallery(resultCode, data); 

      img_myProfile.setImageBitmap(null); 

      img_myProfile.setImageBitmap(setphoto); 

      break; 

     case IMAGE_CAPTURE: 

      this.imageFromGallery(resultCode, data); 

      img_myProfile.setImageBitmap(null); 

      img_myProfile.setImageBitmap(setphoto); 

      break; 
     default: 
      break; 
     } 
    } 
} 

private void imageFromGallery(int resultCode, Intent data) { 
    Uri selectedImage = data.getData(); 
    String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

    Cursor cursor = getContentResolver().query(selectedImage, 
      filePathColumn, null, null, null); 
    cursor.moveToFirst(); 

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 

    profile_Path = cursor.getString(columnIndex); 
    cursor.close(); 

    setphoto = BitmapFactory.decodeFile(profile_Path); 

} 

private void imageFromCamera(int resultCode, Intent data) { 
    updateImageView((Bitmap) data.getExtras().get("data")); 
} 

private void updateImageView(Bitmap newImage) { 
    setphoto = newImage.copy(Bitmap.Config.ARGB_8888, true); 
} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
関連する問題