2013-05-29 15 views
51

Varolan dosya yolundan Bitmap veya Drawable oluşturmaya çalışıyorum.Dosya yolundan Bitmap/Drawable oluştur

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); 

Ama setImageBitmap(), setImageDrawable() yolundan bir görüntü göstermez. mText ile yol yazdırdım ve şu şekilde görünüyor: /storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg

Neyi yanlış yapıyorum? Bana yardım edebilecek kimse var mı?

+0

BitmapFactory.decodeFile (yol): Burada – toantran

+1

@ autobot_101 hata ayıklama modunda, 'mBuffer' içinde' id' vardır. Ama onun "mHeight", "mWidth" değeri "-1" ve "mLayoutBounds", "null". –

+0

O zaman dosya yolunuzu tekrar kontrol etmelisiniz, çünkü bu, görüntünüzün bitmap nesnesine 'şişirilmiş' olmadığı anlamına gelir. Belki başka bir görüntüyü deneyebilirsiniz – toantran

cevap

82

dosya yolundan bit eşlem oluşturun.

Yanlış dosya yolunu veriyorsunuz. :) Bu yardımcı olur umarım. -> bu sizin için bir Bitmap nesnesi çıkmıyor

Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
+1

deneyin. Zaten çözümüm uzun zaman önce aldım, ancak bunu doğru yanıt olarak alacağım çünkü sizde OOM hatalarını da işleyebilir " büyük ölçekli bir resim yükleniyor. Çok temiz ve güzel bir çözüm! Teşekkürler! –

+1

imageName'in herhangi bir dizgi olduğunu mu varsayıyorum? ya da herhangi bir özel imageName mi? – Jeet

+0

@JeetendraChoudhary Evet imageName, resmin adı olarak herhangi bir son Dize olabilir. – CodeShadow

48

Bana uyar:

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); 

} 

Düzenleme:

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

kodlanmış sdcard dizinine yukarıdaki durumda çalışmıyorsa, sen sdcard yolunu getirebilir

+3

"Environment.getExternalStorageDirectory(). ToString()' den SdCard yolunu almayı deneyin ve daha sonra – Antarix

0

Çekmecelerinize bir yol aracılığıyla erişemezsiniz, bu nedenle programlanabilir bir şekilde oluşturabileceğiniz, çiziminizle birlikte okunabilir bir arayüz istiyorsanız.

sınıfınızda bir yere HashMap beyan:

Şimdi
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 
    } 
} 

erişim için -

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

Eh, statik Drawable.createFromPath(String pathName) biraz daha basit bana kendin deşifre daha görünüyor kullanarak ... :-)

mImg ürününüz basit ImageView ise, buna ihtiyacınız yoktur, mImg.setImageUri(Uri uri) doğrudan kullanın . Eğer ebeveynin yüksekliğe bit eşlem ölçekli ve daha sonra Bitmap.createScaledBitmap işlevini kullanın genişliği istiyorsanız

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); 

:

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

Bir yanıtta verdiğiniz kodu açıklamanız gerektiğini unutmayın. –

İlgili konular