2016-08-18 6 views
-1

Ich möchte ein Bild erfassen und im Speicher speichern. Zum Speichern verwende ich unter dem CodeSo speichern Sie das erfasste Bild ohne Komprimierung

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(this.requestCode == requestCode && resultCode == RESULT_OK){ 

      File root = new File(Environment.getExternalStorageDirectory(), "Feedback"); 
      if (!root.exists()) { 
       root.mkdirs(); 
      } 
      File file = new File(root, Constants.PROFILE_IMAGE_NAME+".jpeg"); 
      checkFlowIdisPresent(file); 



      Bitmap photo = (Bitmap)data.getExtras().get("data"); 

      photo = ThumbnailUtils.extractThumbnail(photo, 300, 300); 


      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 

      try { 
       FileOutputStream fo = new FileOutputStream(file); 
       fo.write(bytes.toByteArray()); 
       fo.close(); 

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

      displayPic(); 


     } 
    } 

Jetzt ist das Problem, die Bildqualität ist verloren. So, wie man ein Bild speichert, ohne seine Qualität zu verlieren. wenn ich photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); verwende, um Bild zu speichern, verliert es nicht seine Qualität, aber das Problem ist, dass ich das Bild 300 * 300 die Größe ändern wollte. Bitte helfen Sie mir.

+0

extractThumbnail skaliert nicht, es schneidet –

+0

auch versuchen zu verwenden: Bitmap.CompressFormat.PNG für bessere Qualität –

+0

Zuschneiden ist in Ordnung für mich ... Bitmap.CompressFormat.PNG es hilft nicht –

Antwort

0

Benutzer gleichen Code für die Aufnahme des Fotos. wie -

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
ContentValues values = new ContentValues(); 
values.put(MediaStore.Images.Media.TITLE, "New Picture"); 
values.put(MediaStore.Images.Media.DESCRIPTION, "From your Camera"); 
selectedImageUri = getActivity().getContentResolver().insert(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, selectedImageUri); 
startActivityForResult(intent, REQUEST_CAMERA); 
// - selectedImageUri is global variable 

jetzt onActivityResult

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri); 

nachdem das Ergebnis nur die Größe Ihres Bildes immer mit dieser Methode

public static bitmap resizeBitmap(Bitmap bitmap){ 
    int width = 300; // - Dimension in pixels 
    int height= 300; // - Dimension in pixels 
    return Bitmap.createScaledBitmap(bitmap, width, height, false); 
} 
+0

wenn ich PhotoPickerIntent.putExtra (MediaStore.EXTRA_OUTPUT, outputFileUri); dann in onActivityResult wird diese data.getExtras(). get ("Daten") Null sein. Wie bekomme ich Bitmap um resizeBitmap (Bitmap Bitmap) Methode –

+0

aufrufen Ich wollte Bild im internen Speicher speichern, aber MediaStore.Images.Media.EXTERNAL_CONTENT_URI ist für externen Speicher. Also habe ich zu MediaStore.Images.Media.INTERNAL_CONTENT_URI gewechselt, aber das Problem ist eine Ausnahme. Das Schreiben in den internen Speicher wird nicht unterstützt. –

+0

'Ich wollte Bild im internen Speicher speichern'. Es ist unklar, was Sie als "internen Speicher" betrachten. – greenapps

0

Wenn Sie keine Komprimierung wollen, dann direkt Bitmap verwenden, was Sie holen von der Galerie für Kamera ab. Danke

if(this.requestCode == requestCode && resultCode == RESULT_OK){ 
     File root = new File(Environment.getExternalStorageDirectory(), "Feedback"); 
     if (!root.exists()) { 
      root.mkdirs(); 
     } 
     File file = new File(root, Constants.PROFILE_IMAGE_NAME+".jpeg"); 
     checkFlowIdisPresent(file); 
     Bitmap photo = (Bitmap)data.getExtras().get("data"); 
     // use this bitmap as it is 
    } 
+0

Hinweis zum Kompressor, 0-100. 0 bedeutet Kompresse für kleine Größe, 100 bedeutet Kompresse für maximale Qualität. –

+0

dann wird es sehr schlechte Qualität Bild –

+0

Nein bitte wählen Sie qualitativ hochwertiges Bild dann überprüfen – Saveen

Verwandte Themen