如何从资源中设置位图

306

这似乎很简单,我正在尝试设置一张来自应用程序中可绘制文件夹内资源的位图图像。

bm = BitmapFactory.decodeResource(null, R.id.image);

这是否正确?

6个回答

806
假设您正在 Activity 类中进行调用
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);

第一个参数Resources是必需的。通常可以在任何上下文(包括活动等子类)中获取。


4
我得到了位图的空值,你能告诉我为什么会得到空值吗? - gautam
是的,我遇到了同样的问题,位图的值为空。 - Er.Rohit Sharma
3
我明白了。我正在尝试将矢量可绘制图形转换为位图。以下是将矢量可绘制图形转换为位图的代码。 - Er.Rohit Sharma
2
如果不是从Activity类中调用(例如,如果从数据类中调用),您可以尝试:val myBitmap = BitmapFactory.decodeResource(Resources.getSystem(), R.drawable.your_image) <—Kotlin - Bikeboy
我获取了 Bitmap 的 null 值,因为我正在使用一个矢量资源(如果您使用 .png 例如,它就可以正常工作)。 - dnhyde

40

试试这个

这是来自sdcard的内容

ImageView image = (ImageView) findViewById(R.id.test_image);
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/test2.png");
image.setImageBitmap(bMap);

这是来自资源的内容

Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

9

如果资源正在显示并且是一个视图,您也可以捕获它。就像截屏一样:

View rootView = ((View) findViewById(R.id.yourView)).getRootView();
rootView.setDrawingCacheEnabled(true);
rootView.layout(0, 0, rootView.getWidth(), rootView.getHeight());
rootView.buildDrawingCache();

Bitmap bm = Bitmap.createBitmap(rootView.getDrawingCache());

rootView.setDrawingCacheEnabled(false);

实际上,这会获取整个布局,但您可以根据需要进行更改。


3

如果您已经声明了一个位图对象并且想要显示或存储该位图对象,但首先必须分配任何图像,并可以使用按钮单击事件,此代码仅演示如何将可绘制的图像存储在位图对象中。

Bitmap contact_pic = BitmapFactory.decodeResource(
                           v.getContext().getResources(),
                           R.drawable.android_logo
                     );

现在,您可以使用此位图对象,无论是要存储它还是在Google地图中绘制固定纬度和经度的图片时使用它,或者在其他地方使用。

0

只需替换此行

bm = BitmapFactory.decodeResource(null, R.id.image);

使用

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.YourImageName);

我的意思是说,只需将null值更改为getResources()。如果您在任何按钮或ImageView点击事件中使用此代码,请在getResources()之前附加getApplicationContext()。


0
使用此功能,您可以获取图像位图。只需传递图像 URL 即可。
 public Bitmap getBitmapFromURL(String strURL) {
      try {
        URL url = new URL(strURL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
      } catch (IOException e) {
        e.printStackTrace();
        return null;
      }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接