2016-08-06 51 views
0

Ich bin ein einfaches ImageView in meiner Tätigkeit zeigt:Imagelade Ausgabe: Arbeiten in Emulator, funktioniert nicht in einem realen Gerät

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.package.name.EditPicture"> 

    <ImageView 
     android:id="@+id/problem_picture" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

In meiner Aktivitätsklasse ist dies, wie ich das bin die Einrichtung Bild:

//first calculate the width and height of the screen 
DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int height = displaymetrics.heightPixels; 
int width = displaymetrics.widthPixels; 

//Then, resize the image's width and height equal to that of the screen: 
Picasso.with(this).load(new File(pictureLocation)).rotate(90f).resize(height,width).into(imageView); 

Das Problem ist, ich bin immer das gewünschte Ergebnis im Emulator, aber in meinem echten android-Handy, wird nichts angezeigt. Der gesamte Bildschirm ist leer.

Da ich die Größe des Bildes bereits auf die Bildschirmgröße herabsetze, sollten beim Laden eines Bildes mit hoher Auflösung keine Probleme auftreten. Warum ist mein Bildschirm dann im realen Gerät leer?

+0

Andere Daten sind Display oder nicht – vinoth12594

+0

Es gibt nur ein ImageView in meinem Layout, keine anderen Daten. –

+0

Wie erhalten Sie Bild lokal oder Server? – vinoth12594

Antwort

0

Nach einer wenig Forschung, hier sind der Grund, und eine Lösung:

Der Bildschirm wird leer in einem realen Gerät, da die ImageView nicht in der Lage ist, ein großen laden -Ass Bild (mit Kamera 13MP, die Bilder waren 3-4 MB). Ich probierte ein kleineres Bild (~ 100 KB) und das funktionierte ziemlich gut. Es ist traurig, dass weder Picasso noch Glide das Ding machen konnten.

Deshalb habe ich die Größe neu bestimmt zuerst die Bilder und komprimiert sie dann im 100 KB Bereich fallen (Sie müssen einen anderen Ansatz, wenn Sie die Full-HD-Bild wollen):

/** 
* getting the screen height and width, so that we could resize the image accordingly 
*/ 
DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int height = displaymetrics.heightPixels; 
int width = displaymetrics.widthPixels; 


/** 
* Getting the old photo and then resizing it to the size of the screen. 
* We are also compressing it. 70 is a number between 0 to 100. 
* You see, close to 0 means very low quality but very small in size image 
* Close to 100 means very high quality, but the size will be big. 
*/ 
Bitmap photo = BitmapFactory.decodeFile(pictureLocation); 
photo = Bitmap.createScaledBitmap(photo, width, height, false); 
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
photo.compress(Bitmap.CompressFormat.JPEG, 70, bytes); 


/** 
    * fetching the location where this has to be saved. folder location is the location of my Pictures folder. 
    */ 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String smallFileLocation = folderLocation + File.separator + "IMG_" + timeStamp + ".jpg"; 

    /** 
    * New file is saved at this place now. 
    */ 
    File f = new File(smallFileLocation); 
    f.createNewFile(); 
    FileOutputStream fo = new FileOutputStream(f); 
    fo.write(bytes.toByteArray()); 
    fo.close(); 


    /** 
    * Later, we can simply put the picture in our ImageView using Picasso or just imageView.setImageBitmap 
    */ 
    Picasso.with(this).load(new File(smallFileLocation)).rotate(90f).resize(height,width).into(imageView); 
0

Überprüfen Sie zuerst das Bild, das auf dem Gerät verfügbar ist.

File file = new File(pictureLocation); 
if (file.exists()) { 
    Picasso.with(this).load(new File(pictureLocation)).into(imageView); 
} else { 
    Log.d("Result", "Image not available"); 
} 
+0

Danke für eine Antwort, aber die Datei existiert bereits in meinem Gerät, und ich habe auch die Erlaubnis, es zu lesen. Die Frage ist, ob der Code in Android M Emulator funktioniert, warum funktioniert es nicht in einem echten Gerät. –

+0

Geben Sie pictureLocation Daten – vinoth12594

+0

Wie die Protokolle sagen, '/ Speicher/emuliert/0/Bilder/MyCameraApp/IMG_20160806_170840.jpg' ist der Speicherort. Ich blätterte in meinem Handy, manuell überprüft, dass es da war. Ich habe dann die Protokolle auf ihre Existenz überprüft. –