Я пытаюсь создать Bitmap или Drawable из существующего пути к файлу.
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);
Но setImageBitmap()
, setImageDrawable()
не показывает изображение с пути. Я напечатал путь с помощью, mText
и он выглядит так:/storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg
Что я делаю неправильно? Кто-нибудь может мне помочь?
java
android
android-drawable
bitmapfactory
Нари Ким Шин
источник
источник
id
вmBuffer
. Но егоmHeight
,mWidth
значение-1
иmLayoutBounds
являетсяnull
.Cursor
и пробовал другие изображения, но результат тот же. Кроме того, я проверил путь черезadb shell
и обнаружил, что изображения существуют на этом пути.Ответы:
Создать растровое изображение из пути к файлу:
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);
Если вы хотите масштабировать растровое изображение до родительской высоты и ширины, используйте
Bitmap.createScaledBitmap
функцию.Я думаю, вы указываете неправильный путь к файлу. :) Надеюсь это поможет.
источник
Меня устраивает:
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); }
Редактировать:
Если указанный выше жестко заданный каталог SDCard не работает в вашем случае, вы можете получить путь к SDCard:
String sdcardPath = Environment.getExternalStorageDirectory().toString(); File imgFile = new File(sdcardPath);
источник
Environment.getExternalStorageDirectory().toString()
а затем попробуйтевот решение:
источник
Что ж, использование статики
Drawable.createFromPath(String pathName)
мне кажется более простым, чем ее декодирование самостоятельно ... :-)Если у вас
mImg
простойImageView
, он вам даже не нужен, используйтеmImg.setImageUri(Uri uri)
напрямую.источник
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); }
источник
вы не можете получить доступ к своим чертежам через путь, поэтому, если вам нужен удобный для чтения интерфейс с вашими чертежами, которые вы можете создавать программно.
объявить HashMap где-нибудь в своем классе:
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 } }
Теперь для доступа -
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);
источник