如何从资源设置位图


279

这似乎很简单,我试图设置位图图像,但是从资源来看,我在应用程序中的可绘制文件夹中。

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

这样对吗?

Answers:


756

假设您在Activity类中调用此方法

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);

第一个参数,Resources是必需的。通常可以在任何Context(以及Activity等子类)中获得它。


1
我正在获取位图的空值,你能说我为什么要得到空图

是的,我遇到了同样的问题,位图的值为空。
罗希特·夏尔马

3
我知道了 我正在尝试将可绘制的矢量转换为位图。因此,这是将可绘制矢量转换为位图的编码。
罗希特·夏尔马

如果不是从Activity类调用(例如,如果从数据类调用),则可以尝试:val myBitmap = BitmapFactory.decodeResource(Resources.getSystem(),R.drawable.your_image)<
Kotlin

36

试试这个

这是从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);

7

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

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

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


2

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

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

我的意思是说,只需使用getResources()更改空值即可。如果在任何按钮或图像视图单击事件中使用此代码,只需在getResources()之前附加getApplicationContext()。


0

使用此功能可以获取图像位图。只需传递图片网址

 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;
      }
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.