如何从可绘制文件夹上的图像获取路径并设置为图像视图,位图?

时间:2017-12-13 08:05:55

标签: android image bitmap path android-drawable

我已经从android项目的可绘制文件夹中找到了一些图片。

我创建了一些对象(代理),然后我需要使用我保存在数据库中的这张图片设置imageView

所以,我将图片保存为String photoPath

Uri path1 = Uri.parse("android.resource://"+BuildConfig.APPLICATION_ID+"/" + R.drawable.agent1);
        String photoAg1 = path1.getPath();
ag1.setPhotoPath(photoAg1);

(我已经尝试过path1.toString。)

好的,直到那里没问题。 此对象显示在listView ImageView

要在那里展示,我正在做:

    ImageView photo = (ImageView) view.findViewById(R.id.list_cell_photo);
System.out.println(agent.getPhotoPath());                    
Bitmap bitmap = BitmapFactory.decodeFile(agent.getPhotoPath());
                    Bitmap lowdefbitmap = Bitmap.createScaledBitmap(bitmap,300,300,true);

                    photo.setImageBitmap(lowdefbitmap);

问题出在createScaledBitmap上。 上面的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
                                                                   at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:714)

System.out.println:/ 2131099732返回 如果我把path1.toString返回的是:android.resource://com.aa.xlambton/2131099732

我已经看过了: Create a Bitmap/Drawable from file path

Android get image path from drawable as string

Get absolute path of android drawable image

BitmapFactory: Unable to decode stream: java.io.FileNotFoundException even when file IS actually there

我认为我保存此路径是错误的,因为Bitmap无法对文件进行解码,因此它会变为空createdScaledBitmap

有人能帮助我吗?

4 个答案:

答案 0 :(得分:1)

您可以将参考ID R.drawable.img_name保存为整数而不是保存路径。

当您需要操纵此drawable时,您可以使用该id而不是Bitmap icon = BitmapFactory.decodeResource(context.getResources(), saved_id);

如果您需要来自此drawable的位图,请关注this

{{1}}

答案 1 :(得分:0)

您可以尝试使用此方法:

R.drawable.img_name

答案 2 :(得分:0)

试试这个

public int getImage(String imageName) {

    int drawableResourceId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());

    return drawableResourceId;
}

答案 3 :(得分:0)

在我的项目中,我想从项目文件夹中获取一些图像。因此有一种方法可以在java类中获取图像,但在.xml文件中它很简单。它显然是由资产管理器在android中完成的。  Follow this link
注意: AssetManager assetManager = getAssets();必须位于youractvity.java文件中。