ImageView mit externer quelle

  • Antworten:14
Jonas G.
  • Forum-Beiträge: 152

15.11.2012, 15:23:16 via Website

Hallo AndroidPit Comunity,

Ich will ein Bild, dass ich zuvor mit der Kamera aufgenommen habe anzeigen, das speichern des Bildes funktioniert, und ich habe auch den Pfad dazu.
allerdings schaffe ich es nicht es in z.b. einer ImageView anzuzeigen. Könnt ihr mir da helfen?

Vielen Dank im voraus.

MFG Jonas

Antworten
Jonas G.
  • Forum-Beiträge: 152

15.11.2012, 15:51:40 via Website

es funktioniert leider nicht, es gibt zwar keine Fehlermeldung, aber das Bild wir auch nicht angezeigt :(

Antworten
Jonas G.
  • Forum-Beiträge: 152

16.11.2012, 09:20:20 via Website

1public class NeueMeldungActivity extends Activity {
2 private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
3 private Uri fileUri;
4 private Intent cameraIntent;
5 private ImageView image;
6 private static File mediaFile;
7
8 public void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.neue_meldung);
11 ...
12 // create Intent to take a picture and return control to the calling application
13 cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
14 fileUri = getOutputMediaFileUri(); // create a file to save the image
15 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
16 image = (ImageView) findViewById(R.id.image);
17 }
18
19 ...
20 public void onCameraButtonClick(View v) {
21 startActivityForResult(cameraIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
22 }
23
24 /** Create a file Uri for saving an image or video */
25 private static Uri getOutputMediaFileUri(){
26 return Uri.fromFile(getOutputMediaFile());
27 }
28
29 /** Create a File for saving an image or video */
30 private static File getOutputMediaFile(){
31 // To be safe, you should check that the SDCard is mounted
32 // using Environment.getExternalStorageState() before doing this.
33
34 File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
35 Environment.DIRECTORY_PICTURES), "<app-name>");
36 // This location works best if you want the created images to be shared
37 // between applications and persist after your app has been uninstalled.
38
39 // Create the storage directory if it does not exist
40 if (! mediaStorageDir.exists()){
41 if (! mediaStorageDir.mkdirs()){
42 return null;
43 }
44 }
45
46 // Create a media file name
47 String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
48 mediaFile = new File(mediaStorageDir.getPath() + File.separator +
49 "IMG.jpg");
50 return mediaFile;
51 }
52 @Override
53 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
54 if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
55 if (resultCode == RESULT_OK) {
56 System.out.println(mediaFile.getAbsolutePath());
57 Bitmap myBitmap = BitmapFactory.decodeFile(mediaFile.getAbsolutePath());
58 image.setImageBitmap(myBitmap);
59 myBitmap.recycle();
60 } else if (resultCode == RESULT_CANCELED) {
61 Toast.makeText(this, "Camera Canceled", Toast.LENGTH_LONG).show();
62 // User cancelled the image capture
63 } else {
64 Toast.makeText(this, "Saving image failet", Toast.LENGTH_LONG).show();
65 // Image capture failed, advise user
66 }
67 }
68 }
69}

Ich habe unwichtige Stellen durch "..." ersetzt und den App Name durch "<app-name>"

Antworten
Jonas G.
  • Forum-Beiträge: 152

10.12.2012, 12:14:27 via Website

Ich habe einen Fehler gefunden, hier der Artikel (Gilt für alle Samsung's).

nun habe ich allerdings bemerkt das das Bild Schwarz ist (getestet auf einem HTC).

— geändert am 13.12.2012, 09:41:25

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

19.12.2012, 09:59:43 via Website

Probier das mal. Das ist eine stark abgespeckte Variante von dem Code mit dem ich das immer mache. Bisher habe ich noch keine Beschwerden gehört. Ob es auf ganz bestimmten Geräten läuft oder nicht kann ich Dir aber nicht sagen.

Wenn das nicht klappt dann haben meine Apps auf den betreffenden Geräten ebenfalls ein Problem. Das wiederum juckt mich mittlerweile nicht mehr. Die Android Geräte sind derart zersplittert - ich kann mich wirklich nicht mehr um das letzte China-DingsBums kümmern - auch wenn es Samsung heißt ;-)

Aufruf:

1ContentValues values = new ContentValues();
2 values.put(MediaStore.Images.Media.DESCRIPTION, "Irgendeine Beschreibung");
3 values.put(MediaStore.Images.Media.TITLE, "Irgendein Titel");
4 uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
5
6 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
7 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
8 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
9 startActivityForResult(intent, 1);

Ergebnis:

1@Override
2protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
3 switch (requestCode) {
4 case 1:
5 if (resultCode == RESULT_OK) {
6 Cursor cursor = managedQuery(uri,
7 new String[] {
8 MediaStore.Images.Media._ID,
9 MediaStore.Images.Media.DATA,
10 MediaStore.Images.ImageColumns.ORIENTATION
11 },
12 null,
13 null,
14 null);
15 if (cursor != null) {
16 if (cursor.moveToFirst()) {
17 File file = new File(cursor.getString(cursor
18 .getColumnIndexOrThrow(MediaStore.Images.Media.DATA)));
19 // Hier ist Dein file - kopiere es wenn Du es an anderer Stelle haben willst zum Beispiel mit FileUtils.copyFile aus der Apache Library
20 }
21
22 cursor.close();
23 }
24 }
25
26 break;
27 default:
28 super.onActivityResult(requestCode, resultCode, intent);
29 }
30}

Anzeigen:

1Bitmap bitmap = BitmapFactory.decodeFile("Die Datei");
2 imageView.setImageBitmap(bitmap);

— geändert am 19.12.2012, 10:04:46

Antworten
Jonas G.
  • Forum-Beiträge: 152

19.12.2012, 11:27:44 via Website

Dank für die Hilfe.

Aber mein Emulator (und Handy) stürzt ab wen ich den Code ausführe :(

kann es sein, das die BitmapFactory zufiel RAM für das Komplette Bild braucht (falls jemand eine passende Funktion kennt, ich brauch eigentlich nur ein Thumbnail)
1ImageView image = (ImageView) findViewById(R.id.image);
2myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
3setImageBitmap(myBitmap);
4refreshDrawableState();
5recycle();

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.12.2012, 11:38:02 via Website

Jonas G.
Aber mein Emulator (und Handy) stürzt ab wen ich den Code ausführe :(

kann es sein, das die BitmapFactory zufiel RAM für das Komplette Bild braucht (falls jemand eine passende Funktion kennt, ich brauch eigentlich nur ein Thumbnail)
"Stürzt ab" ist eine etwas magere Fehlerbeschreibung für ein Developer-Forum ;-)

Und dank LogCat + StackTrace muss man auch nicht raten was das Problem ist :)

— geändert am 19.12.2012, 11:38:34

San Blarnoi

Antworten
Jonas G.
  • Forum-Beiträge: 152

19.12.2012, 11:39:37 via Website

112-12 15:34:33.104: E/AndroidRuntime(1084): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412e9d20

Antworten
Jonas G.
  • Forum-Beiträge: 152

19.12.2012, 12:20:01 via Website

ja -.-
Ich habe gerade eine (jetzt funktionierende Funktion) getestet, als das Popup mit "Neuer Beitrag in Thread "ImageView mit externer quelle"" kam XD

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

19.12.2012, 15:04:03 via Website

Jonas G.
kann es sein, das die BitmapFactory zufiel RAM für das Komplette Bild braucht

Klar kann das sein - kommt halt auf das Image an. Es ging uns beiden doch primär um das Beschaffen eines Bildes von der Kamera. Klappt das?

Einen Thumbnail kannst Du Dir selbst skalieren:

1Bitmap bitmapOriginal = BitmapFactory.decodeFile("Die Datei");
2Bitmap bitmapThumbnail = Bitmap.createScaledBitmap(bitmapOriginal, 96, 96, false);
3imageView.setImageBitmap(bitmapThumbnail);

Antworten
Jonas G.
  • Forum-Beiträge: 152

19.12.2012, 16:02:53 via Website

Ja jetzt funktioniert es, ich muss jetzt nur noch eine Samsung Lösung Finden/Implementieren.
noch eine Frage, weist du wie ich das Bild wieder löschen kann (nach dem beenden des Uploads soll es nicht im Dateisystem zu finden sein)?

Antworten