2016-10-10 40 views
5

Chcę przesłać zdjęcie z mojego aparatu bezpośrednio do folderu napędu:Prześlij zdjęcie na dysk bez kompresji

OutputStream outputStream = result.getDriveContents().getOutputStream(); 
        ByteArrayOutputStream bitmapStream = new ByteArrayOutputStream(); 
/* image is my Bitmap */ 
        image.compress(Bitmap.CompressFormat.PNG, 100, bitmapStream); 

        try { 
         outputStream.write(bitmapStream.toByteArray()); 
        } catch (IOException e1) { 
         Log.i(TAG, "Unable to write file contents."); 
        } 

Więc robię to i to działa. Problem polega na tym, że moje zdjęcia na dysku są w bardzo niskiej jakości i muszę mieć wideo wysokiej jakości.

Próbowałem już to rozwiązanie Converting bitmap to byteArray android

Ale wtedy na Dysku zdjęcie Waśniów rozpoznać jako pliku multimedialnego i nie można go odczytać. Być może coś zawiodłem.

EDIT: Zrobiłem dokładnie te same rzeczy, które tam jest https://stackoverflow.com/a/13000774/6644403 i robi w ten sposób, aby moje bitmapę w ActivityResult:

try { 
        mBitmapToSave = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
+0

Możesz chcieć dostarczyć URI dla obrazu wyjściowego, jak omówiono w tym SO [pytanie] (http://stackoverflow.com/a/10272781/5995040). Jeśli "uri" nie zostanie podany, intencja kamery zwróci tylko miniaturę zdjęcia. Możesz również sprawdzić ten samouczek - [Take Picture in Android] (http://www.tutorialforandroid.com/2010/10/take-picture-in-android-with.html), aby zobaczyć, jak implementacja, jak to zrobić to właściwie. Mam nadzieję że to pomoże. –

+0

Próbowałem, ale nie wiem, dlaczego nie znalazłem sposobu, aby uzyskać bitmapę mimo wszystko. Kiedy próbuję określić uri, nie mogę pobrać pełnego obrazu –

Odpowiedz

1

Aby uzyskać rzeczywisty obraz predefiniowaną ścieżką przechwyconego obrazu za pomocą

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
this.startActivityForResult(cameraIntent, 101); 

Po przechwycony obraz można uzyskać zarejestrowanego obrazu na ścieżce, która jest ustawiona w cameraIntent. Jeśli nie chcesz ustawić wstępnie zdefiniowanej ścieżki, sprawdź dane dotyczące intencji.

if (resultCode == android.app.Activity.RESULT_OK && requestCode == 101) { 
     try {   
      path_mm = "Onsuccess_resultcode"; 
      generateNoteOnSD("photo34.txt", path_mm); 
      Bitmap photo = null; 
      if (data == null) { 
         //get Bitmap here. 
      } else { 
       Uri u1 = data.getData(); 
       //get uri and find actual path on that uri. 
       } 
      }catch(Exception ex) {} 
} 

Skorzystaj z tego linku Upload large files to Google Drive using GD API dla drive google Przesyłanie.

1

I nie było prośbą o prawach do WRITE_EXTERNAL_STORAGE, to było w moim manifest ale od api23 muszę wyraźnie i zapytać, czy użytkownik jest w porządku.

Teraz jest dobrze.