如何从资源中设置位图

Posted

技术标签:

【中文标题】如何从资源中设置位图【英文标题】:How to set a bitmap from resource 【发布时间】:2011-06-24 17:24:35 【问题描述】:

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

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

这是正确的吗?

【问题讨论】:

【参考方案1】:

假设您在 Activity 类中调用它

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

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

【讨论】:

我得到位图的空值,你能告诉我为什么我得到空值 是的,我遇到了同样的问题,位图的值为空。 我遇到了问题。我试图将矢量可绘制转换为位图。所以这里是将矢量可绘制转换为位图的代码。 如果 not 从 Activity 类调用(例如,如果从数据类调用),您可以尝试: val myBitmap = BitmapFactory.decodeResource(Resources.getSystem(), R .drawable.your_image) 【参考方案2】:

试试这个

这是来自 SD 卡

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

【讨论】:

【参考方案3】:

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

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

这实际上抓取了整个布局,但您可以随意更改。

【讨论】:

【参考方案4】:

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

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

现在您可以使用这个位图对象,无论您是想存储它,还是在谷歌地图中使用它,同时在固定的经纬度上绘制图片,或者在其他地方使用它

【讨论】:

【参考方案5】:

只需替换这一行

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

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

我的意思是用 getResources() 改变 null 值

【讨论】:

【参考方案6】:

使用这个函数可以获得Image Bitmap。只需传递图片网址

 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;
      
 

【讨论】:

以上是关于如何从资源中设置位图的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 ImageView 是不是包含位图?

在 Visual C++ 中设置小图标和大图标

Win32 - 如何获取给定系统光标位图的偏移量?

如何从资源位图文件中加载图像数据以进行 directshow 过滤器?

在ImageView中设置圆角图像

在 .NET Format16bppGrayScale 图像中设置单个像素