2016-04-04 22 views
4

Ich versuche eine App zu erstellen, die ein Bild mit der Kamera aufnimmt und es an die Hauptaktivität zurücksendet, um es in einem ImageVew anzuzeigen. Ich habe ein Tutorial gesehen, das das Bild auf der SD-Karte speichert, wenn das Bild aufgenommen wird. Ich kann die Datei speichern, habe aber Schwierigkeiten, den Speicherort des gespeicherten Bildes zu ermitteln.Android - Beim Speichern eines Bildes ist es besser, es zu speichern oder temporär zu speichern.

Ich denke, dass das Speichern des Bildes auf der SD-Karte zu viel Arbeit ist, da das Bild nicht so wichtig ist.

Gibt es eine Möglichkeit, das Bild, das ich gerade mit der Kamera aufgenommen habe, in einem BitMap-Element zu "speichern"? Wenn ja, ist es effizienter als das Speichern auf der SD-Karte?


Hier ist meine MainActivity.java:

public class MainActivity extends AppCompatActivity { 
private Uri imgLocation; 
ImageView mImageView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button capture = (Button) findViewById(R.id.am_btn_camera); 
    capture.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

      imgLocation = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "fname_" + 
        String.valueOf(System.currentTimeMillis()) + ".jpg")); 

      intent.putExtra(MediaStore.EXTRA_OUTPUT, imgLocation); 
      startActivityForResult(intent, 1); 
     } 
    }); 
} 

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

    if (requestCode == 1 && resultCode == RESULT_OK) { 

     Log.e("URI",imgLocation.toString()); 
     mImageView.setImageBitmap(BitmapFactory.decodeFile(imgLocation.toString())); 
    } 
}} 
+0

Sie können eine In-Memory-Lösung verwenden, z. B. das Speichern der Bitmap in einem Singleton. Aber denken Sie daran, dies wird Ihre Android-Speicher essen. –

+0

Danke Tim. Ich ging für den Ansatz, es in einer Bitmap zu speichern, aber es ist eine kleinere Version des Bildes, es wird für jetzt tun. Grüße. –

Antwort

3

Es ist besser, nur um es auf dem externen/internen Speicher zu speichern und dann zugreifen. Es ist besser, selbst zu eine Drittanbieter-Bibliothek verwenden, um alle das Bild und ihre faul-Laden wie Rendering zu handhaben:

Die meisten davon Bibliotheken werden sich auf die Verarbeitung von Ressourcen aus HTTP-URLs konzentrieren, können jedoch weiterhin zum Laden von Informationen aus einer lokalen Datei oder einem Inhaltsanbieter verwendet werden.

Die Handhabung von Bildern mit Bitmaps kann OutOfMemoryError leicht verursachen, wie in this link gezeigt. Obwohl in diesem Fall nur 1 Bitmap verwendet wird, gibt es nicht viel zu befürchten.

+1

Für ein Beispiel. Laden Sie das Bild aus dem Dateisystem mit Picasso http://StackOverflow.com/Questions/23681177/Picasso-Load-image-from-filesystem – mubeen

1

Es ist fast immer besser, es im Dateisystem zu speichern und die filepath innerhalb activities zu übergeben.

Android Bitmaps buchstäblich eine Menge Speicher verbrauchen, und es ist nie eine gute Idee, es im Speicher zu behalten, es sei denn, es ist wirklich erforderlich.

Ich weiß, es ist ein wenig mühsam, es im Dateisystem zu speichern und die Dateireferenz zu übergeben, aber es wird später viele unerwünschte outOfMemory Fehler in Ihrer App verhindern.

0

Verwenden Sie Picasso. Es wird automatisch die Datei für Sie im Dateisystem zwischenspeichern.

Wenn Sie diese Datei länger auf der Festplatte speichern müssen, müssen Sie sie selbst speichern.

Verwandte Themen