2012-05-03 3 views
1

에 SD 카드에 촬영 한 사진의 이름을 변경 전, 아래의 링크에서 코드를 사용하여 매우 helpfull했다했습니다, 감사합니다 : http://www.tutorialforandroid.com/2010/10/take-picture-in-android-with.html저장/안드로이드

일부 사진 문제로 도움이 필요합니다! takePhoto는() MediaStore.ACTION_IMAGE_CAPTURE, 대해서 getFile()는 내가 이미지 뷰로 촬영 한 사진을 보여주고 싶습니다 그리고 난 좋겠) "이미지 골키퍼"디렉토리를 만든 다음 "이미지-SOMENUMBER.jpg"이름으로 사진을 촬영 저장합니다! onActivityResult를 (에서 시작 edittext 또는 무언가에있는 무언가 사용자 입력에 그림의 이름을 바꾸는 것을 좋아하십시오!

두 가지 질문이 있습니다

1) 왜 내가 이미지 뷰가 시도 {} 부분에있는 내 사진을 보여 얻을 수 없다? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 저장된 이미지의 경로는 어떻게 얻을 수 있습니까?

2) 내가 사진에게 그들이 원하는 방식으로? (같은 이름을 사용자가 설정할 수있는 방법 또는 일부 버튼의 이름을 변경하는 요법을 클릭합니다.)

어떤 생각을 환영합니다! 감사가 "다른 이름으로 저장"입니다!

private static final int TAKE_PHOTO_CODE = 1; 

private void takePhoto(){ 
    final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getFile(this))); 
    startActivityForResult(intent, TAKE_PHOTO_CODE); 
} 

private File getFile(Context context){ 

    final File path = new File(Environment.getExternalStorageDirectory(), "Image keeper"); 
    if(!path.exists()){ 
    path.mkdir(); 
    } 
    String name; 
    int n = 100000; 
    int rand; 
    rand = new Random().nextInt(n); 
    name = "Image-" + rand + ".jpg"; 
    File file = new File(path,name); 

    return file; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch(requestCode){ 
     case TAKE_PHOTO_CODE: 
     final File file = getFile(this); 
     try { 
      Bitmap captureBmp; 
      captureBmp = Media.getBitmap(getContentResolver(), Uri.fromFile(file)); 

      iv = (ImageView) findViewById(R.id.imageView1); 
      iv.setImageBitmap(captureBmp); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     break; 
    } 
    } 
} 

답변

1

내 문제의 일부를 이름 바꾸기 해결할 수 있지만,이 코드 조각이 나를 위해 일을했다 : 여기

코드입니다! 나는 그것이 조금 더 매끈 매끈하게하게 될 수있다라고 확신한다. 그러나 그것은 일한다! 그것은 사진을 찍고, SD 카드에 저장하고 그것에 경로를 얻는 것을 포함한다!

ImageView iv; 
static File image; 
Uri ImageUri; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button btn = (Button) findViewById(R.id.button1); 

    btn.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     takePhoto(); 

    } 
}); 
} 

private static final int TAKE_PHOTO_CODE = 1; 

private void takePhoto(){ 
    image = getFile(this); 
    final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(image)); 
    startActivityForResult(intent, TAKE_PHOTO_CODE); 
} 

private File getFile(Context context){ 

    final File path = new File(Environment.getExternalStorageDirectory(), "Image keeper"); 
    if(!path.exists()){ 
    path.mkdir(); 
    } 
    String name; 
    int n = 100000; 
    int rand; 
    rand = new Random().nextInt(n); 
    name = "Image-" + rand + ".jpg"; 
    File fileimage = new File(path, name); 

    return fileimage; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch(requestCode){ 
     case TAKE_PHOTO_CODE: 

     try { 
      Bitmap captureBmp; 
      captureBmp = Media.getBitmap(getContentResolver(), Uri.fromFile(image)); 

      ImageUri = Uri.fromFile(image); 
      String pathToImage = ImageUri.getPath(); 

      iv = (ImageView) findViewById(R.id.imageView1); 
      iv.setImageBitmap(captureBmp); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     iv.setAdjustViewBounds(true); 

     break; 
    } 
    } 
}