Создание растрового изображения /Drawable из пути к файлу
Я пытаюсь создать 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
Что я делаю неправильно? Кто-нибудь может мне помочь?
Ответы
Ответ 1
Создать растровое изображение из пути к файлу:
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
.
Я думаю, что вы задаете неправильный путь к файлу.:) Надеюсь, это поможет.
Ответ 2
Это работает для меня:
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:
Если вышеприведенный жесткий диск sdcard не работает в вашем случае, вы можете получить путь к SDK:
String sdcardPath = Environment.getExternalStorageDirectory().toString();
File imgFile = new File(sdcardPath);
Ответ 3
вот решение:
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
Ответ 4
Ну, использование статического Drawable.createFromPath(String pathName)
кажется для меня немного более простым, чем его декодирование...: -)
Если ваш mImg
является простым ImageView
, вам это даже не нужно, используйте mImg.setImageUri(Uri uri)
напрямую.
Ответ 5
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);
}
Ответ 6
вы не можете получить доступ к своим чертежам через путь, поэтому, если вы хотите, чтобы пользовательский интерфейс с вашими чертежами был написан с возможностью чтения.
объявить 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);