2011-12-09 2 views
2

사진을 찍어 특정 폴더에 저장하려면 어떻게합니까? 나는 그것이 SDCARD에 저장 알고/DCIM/등모노 드 로이드 설정 sdcard에 저장된 이미지보기

그러나 나는 그것이

나는 다음과 같이 디렉토리를 만든/SDCARD/카메라에있는 폴더에 저장하려면, 거기 싶지 않아 :

String destPath = Android.OS.Environment.ExternalStorageDirectory + "/Camera"; 

그런 다음 카메라를 실행하고 내가 만든 경로에 저장 파일을 지정해 봅니다.

Intent launchCamera = new Intent(Android.Provider.MediaStore.ActionImageCapture); 
launchCamera.PutExtra(MediaStore.ExtraOutput, destPath); 

이것은 작동하지 않습니다. 이미지는 여전히/sdcard/dcim/etc에 저장됩니다.

아이디어가 있습니까?

답변

2

Monodroid를 사용하여 응용 프로그램을 개발할 때 수집 한 내용은 카메라가 매우 버그가 많아서 대부분의 시간에 원하는 것을 수행하지 않는다는 것입니다. 여기에는 이미지 캡처가 저장 될 대상 지정이 포함됩니다. 제 지식에는 이러한 문제가 Monodroid에만 국한되지 않으며 java android sdk에서 발생합니다.

이 문제를 해결하려면 대상을 지정하지 않고 이미지를 캡처 한 다음 OnActivityResult 메서드에서 갤러리에 저장된 최신 이미지를 검색하십시오. 최신 이미지를 얻은 다음 원하는 이미지로 이동할 수 있습니다.

다음은 OnActivityResult 내의 코드 예입니다.

원하는 목적지 나는 lanks의 솔루션에 추가 할

System.IO.File.Move (origin, "yourdestinationfilenamehere"); 
1

에 이미지를 이동

캡처 된 이미지

Android.Net.Uri targetUri = data.Data; 
String origin = ""; 
String [] proj = { MediaStore.MediaColumns.Data.ToString(), BaseColumns.Id }; 

var qry = ManagedQuery (MediaStore.Images.Media.ExternalContentUri, proj, null, null, "date_added DESC"); 

qry.MoveToFirst(); 

origin = qry.GetString (qry.GetColumnIndexOrThrow (MediaStore.MediaColumns.Data.ToString())); 
의 파일 이름을 검색합니다.

의 당신이 ACTIVITY_RESULT_PICTURE_TAKEN 당신이 완성 된 활동을 확인하기 위해 하여 onActivityResult에서 사용할 수있는 단순한 값 그림

var uri = ContentResolver.Insert(MediaStore.Images.Media.ExternalContentUri, 
           new ContentValues()); 

var intent = new Intent(MediaStore.ActionImageCapture); 
intent.PutExtra(MediaStore.ExtraOutput, uri); 
StartActivityForResult(intent, ACTIVITY_RESULT_PICTURE_TAKEN); 

pictureUri = uri; 

을 적용하려면 다음 코드를 사용한다고 가정 해 봅시다.

귀하의 onActivityResult를이 같은 것을 볼 수 있었다 :

protected override void OnActivityResult(int requestCode, 
             Result resultCode, Intent data) 
{ 
    if (resultCode == Result.Ok && requestCode == ACTIVITY_RESULT_PICTURE_TAKEN) 
    { 
     string picturePath = GetRealPathFromURI(pictureUri); 
     //Do something with the file 
    } 
} 

이전에 가지고 열린 안드로이드 특정 뭔가 번역 될 필요가있다.

유효 경로가 이 아닌 "// content : // media/external/media/11917"처럼 보입니다. GetRealPathFromURI의 함수가 정확히 무엇

: 당신이 실제 경로를했으면, 당신은 당신이 lanks 제안으로 원하는 목적지로 이동할 수 있습니다

public string GetRealPathFromURI(Android.Net.Uri contentUri) 
{    
    var mediaStoreImagesMediaData = "_data"; 
    string[] projection = { mediaStoreImagesMediaData }; 
    Android.Database.ICursor cursor = this.ManagedQuery(contentUri, projection, 
                 null, null, null); 
    int columnIndex = cursor.GetColumnIndexOrThrow(mediaStoreImagesMediaData); 
    cursor.MoveToFirst(); 
    return cursor.GetString(columnIndex); 
} 

.

관련 문제