Ich versuche, eine Bitmap oder ein Drawable aus dem vorhandenen Dateipfad zu erstellen.
String path = intent.getStringExtra("FilePath");
BitmapFactory.Options option = new BitmapFactory.Options();
option.inPreferredConfig = Bitmap.Config.ARGB_8888;
mImg.setImageBitmap(BitmapFactory.decodeFile(path));
// mImg.setImageBitmap(BitmapFactory.decodeFile(path, option));
// mImg.setImageDrawable(Drawable.createFromPath(path));
mImg.setVisibility(View.VISIBLE);
mText.setText(path);
Aber setImageBitmap()
, setImageDrawable()
nicht zeigt ein Bild aus dem Weg. Ich habe Pfad mit gedruckt mText
und es sieht aus wie:/storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg
Was mache ich falsch? Kann mir jemand helfen?
java
android
android-drawable
bitmapfactory
Nari Kim Shin
quelle
quelle
id
inmBuffer
. Aber seinmHeight
,mWidth
Wert ist-1
, undmLayoutBounds
istnull
.Cursor
und habe andere Bilder ausprobiert, aber das gleiche Ergebnis. Außerdem habe ich den Pfad über überprüftadb shell
und herausgefunden, dass Bilder in diesem Pfad vorhanden sind.Antworten:
Erstellen Sie eine Bitmap aus dem Dateipfad:
Wenn Sie die Bitmap auf die Höhe und Breite des übergeordneten Elements skalieren möchten, verwenden Sie die
Bitmap.createScaledBitmap
Funktion.Ich denke, Sie geben den falschen Dateipfad an. :) Hoffe das hilft.
quelle
Für mich geht das:
Bearbeiten:
Wenn das oben beschriebene fest codierte SD-Kartenverzeichnis in Ihrem Fall nicht funktioniert, können Sie den SD-Kartenpfad abrufen:
quelle
Environment.getExternalStorageDirectory().toString()
und versuchen Sie es dannHier ist eine Lösung:
quelle
Nun, die Verwendung der Statik
Drawable.createFromPath(String pathName)
scheint mir ein bisschen einfacher zu sein, als sie selbst zu dekodieren ... :-)Wenn Ihr
mImg
ein einfaches istImageView
, brauchen Sie es nicht einmal, verwenden Sie esmImg.setImageUri(Uri uri)
direkt.quelle
quelle
Sie können nicht über einen Pfad auf Ihre Drawables zugreifen. Wenn Sie also eine lesbare Schnittstelle zu Ihren Drawables wünschen, die Sie programmgesteuert erstellen können.
Deklarieren Sie irgendwo in Ihrer Klasse eine HashMap:
Jetzt für den Zugriff -
quelle