2013-05-29 7 views
51

Ich versuche, eine Bitmap oder Drawable aus vorhandenen Dateipfad erstellen.Erstellen Sie ein Bitmap/Drawable aus Dateipfad

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() kein Bild vom Weg zeigen. Ich habe Pfad mit mText gedruckt und es sieht so aus: /storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg

Was mache ich falsch? Kann mir jemand helfen?

+0

BitmapFactory.decodeFile (Pfad) -> das für Sie ein Bitmap-Objekt zurückgibt? Kannst du es verifizieren? – toantran

+1

@ Autobot_101 im Debug-Modus, hat es 'id' in' mBuffer'. Aber der 'mHeight',' mWidth' Wert ist '-1' und' MLayoutBounds' ist 'null'. –

+0

Dann sollten Sie Ihren Dateipfad erneut überprüfen, da dies bedeutet, dass Ihr Bild nicht auf das Bitmap-Objekt "aufgeblasen" wurde. Vielleicht können Sie ein anderes Bild versuchen – toantran

Antwort

82

erstellen Bitmap aus Dateipfad:

File sd = Environment.getExternalStorageDirectory(); 
File image = new File(sd+filePath, imageName); 
BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions); 
bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); 
imageView.setImageBitmap(bitmap); 

Wenn Sie die Bitmap in der Eltern Höhe skalieren möchten und dann Bitmap.createScaledBitmap Funktion der Breite.

Ich denke, Sie geben den falschen Dateipfad. :) Hoffe das hilft.

+1

Ich habe meine Lösung schon lange her, aber ich nehme das als richtige Antwort, weil sie auch OOM-Fehler verarbeiten kann. Laden Sie ein großes Bild hoch. Sehr saubere und schöne Lösung! Vielen Dank! –

+1

Ich nehme an, dass imageName hier eine beliebige Zeichenfolge ist? oder ist es ein bestimmter ImageName? – Jeet

+0

@JeetendraChoudhary Ja imageName könnte eine beliebige letzte Zeichenfolge als Name des Bildes sein. – CodeShadow

48

Es funktioniert für mich:

File imgFile = new File("/sdcard/Images/test_image.jpg"); 
if(imgFile.exists()){ 
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
    //Drawable d = new BitmapDrawable(getResources(), myBitmap); 
    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest); 
    myImage.setImageBitmap(myBitmap); 

} 

Edit:

String sdcardPath = Environment.getExternalStorageDirectory().toString(); 
File imgFile = new File(sdcardPath); 
:

Wenn über Verzeichnis hartcodierte sdcard ist in Ihrem Fall arbeiten, können Sie die SD-Karte Weg holen kann

+3

Versuchen Sie, den SdCard-Pfad von 'Environment.getExternalStorageDirectory(). ToString()' zu bekommen und versuchen Sie dann – Antarix

0

Sie können nicht über einen Pfad auf Ihre Drawables zugreifen. Wenn Sie also eine visuell lesbare Schnittstelle mit Ihren Zeichenelementen benötigen, können Sie sie programmatisch erstellen.

deklarieren eine HashMap irgendwo in Ihrer Klasse:

private static HashMap<String, Integer> images = null; 

//Then initialize it in your constructor: 

public myClass() { 
    if (images == null) { 
    images = new HashMap<String, Integer>(); 
    images.put("Human1Arm", R.drawable.human_one_arm); 
    // for all your images - don't worry, this is really fast and will only happen once 
    } 
} 

Jetzt für den Zugang -

String drawable = "wrench"; 
// fill in this value however you want, but in the end you want Human1Arm etc 
// access is fast and easy: 
Bitmap wrench = BitmapFactory.decodeResource(getResources(), images.get(drawable)); 
canvas.drawColor(Color .BLACK); 
Log.d("OLOLOLO",Integer.toString(wrench.getHeight())); 
canvas.drawBitmap(wrench, left, top, null); 
3

Nun, die statische Drawable.createFromPath(String pathName) scheint ein bisschen einfacher für mich mit, als es selbst Decodierung ... :-)

Wenn Ihre mImg eine einfache ImageView ist, brauchen Sie es nicht einmal, verwenden Sie mImg.setImageUri(Uri uri) direkt .

1
static ArrayList< Drawable> d; 
d = new ArrayList<Drawable>(); 
for(int i=0;i<MainActivity.FilePathStrings1.size();i++) { 
    myDrawable = Drawable.createFromPath(MainActivity.FilePathStrings1.get(i)); 
    d.add(myDrawable); 
} 
+3

Beachten Sie, dass Sie den Code, den Sie in einer Antwort angeben, erläutern sollten. –

18

hier eine Lösung:

Bitmap bitmap = BitmapFactory.decodeFile(filePath);