文档章节

如何将Drawable转换为位图?

j
 javail
发布于 2019/12/15 18:10
字数 397
阅读 64
收藏 0

我想将某个Drawable设置为设备的墙纸,但是所有墙纸功能仅接受Bitmap 。 我的2.1版之前无法使用WallpaperManager

另外,我的可绘制对象是从Web下载的,并不位于R.drawable


#1楼

public static Bitmap drawableToBitmap (Drawable drawable) {
    Bitmap bitmap = null;

    if (drawable instanceof BitmapDrawable) {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
        if(bitmapDrawable.getBitmap() != null) {
            return bitmapDrawable.getBitmap();
        }
    }

    if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
        bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
    } else {
        bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    }

    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);
    return bitmap;
}

#2楼

 // get image path from gallery
protected void onActivityResult(int requestCode, int resultcode, Intent intent) {
    super.onActivityResult(requestCode, resultcode, intent);

    if (requestCode == 1) {
        if (intent != null && resultcode == RESULT_OK) {             
            Uri selectedImage = intent.getData();

            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            filePath = cursor.getString(columnIndex);

            //display image using BitmapFactory

            cursor.close(); bmp = BitmapFactory.decodeFile(filepath); 
            iv.setBackgroundResource(0);
            iv.setImageBitmap(bmp);
        }
    }
}

#3楼

很简单

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

#4楼

这是更好的分辨率

public static Bitmap drawableToBitmap (Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

public static InputStream bitmapToInputStream(Bitmap bitmap) {
    int size = bitmap.getHeight() * bitmap.getRowBytes();
    ByteBuffer buffer = ByteBuffer.allocate(size);
    bitmap.copyPixelsToBuffer(buffer);
    return new ByteArrayInputStream(buffer.array());
}

如何将可绘制位读取为InputStream的代码


#5楼

Android提供了一种非直接的解决方案: BitmapDrawable 。 要获得位图,我们必须将资源ID R.drawable.flower_pic提供给BitmapDrawable ,然后将其转换为Bitmap

Bitmap bm = ((BitmapDrawable) getResources().getDrawable(R.drawable.flower_pic)).getBitmap();

本文转载自:https://bn.sofbug.com/question/Cjim

j
粉丝 5
博文 1145
码字总数 0
作品 0
深圳
私信 提问
Bitmap和Drawable的关系、区别

Bitmap - 称作位图,一般位图的文件格式后缀为bmp Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像 比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象...

移动开发
2017/12/22
0
0
图片和图形之Drawables(2)

原文 Drawables 两种方法来定义和实例化: 充满保存在项目中的图像资源(位图文件)。 充满定义可绘制属性的XML资源。 从资源图像创建绘图 支持的文件类型有PNG(首选),JPG(可接受)和GIF...

lichong951
2018/05/25
0
0
Android应用资源---绘制资源类型(Drawable)(一)

可绘制资源是指能够被绘制到屏幕上的图形的一般化概念,并且能够用诸如getDrawable(int)等API方法来获取这些资源,或者使用诸如android:drawable和android:icon属性把它们应用到另一个XML资源...

长平狐
2012/10/16
699
0
Android中使用SVG实现炫酷动画效果

前言 SVG,即Scalable Vector Graphics 可伸缩矢量图形。这种图像格式在前端中已经使用的非常广泛,而在移动端的开发中,遇到一些复杂的自定义控件或者动画效果,我们就可以考虑使用SVG。 一...

SilenceOO
2017/11/27
0
0
Android画布和图形绘制---Canvas and Drawables(三)

本文译自:http://developer.android.com/guide/topics/graphics/2d-graphics.html 图形绘制 Android为绘制图形和图片提供了一个定制的2D图形类库。android.graphics.drawable包中能够找到用...

长平狐
2012/10/16
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Eclipse IDE for Java - 全黑主题

有没有办法让Eclipse彻底变成黑暗的IDE? 这是我要问的图片 : 我不介意做一个小时的工作来做这样的事情:D 编辑: 正如Konstantin Komissarchik所说,我不得不修改我的操作系统颜色。 这可以...

javail
22分钟前
50
0
mysql基本语法

运算符 = --------------------表示等于 <> --------------------表示不等于 between ... and ... ---显示在某一区间的值(含头尾) like ------------------...

varju
27分钟前
74
0
区块链资产量化交易中的跨币种对冲策略

在对冲策略中,有各种类型的对冲。跨市场对冲,跨期对冲等等,今天我们来聊一下跨品种对冲,准确的说是区块链资产量化交易中的跨币种对冲策略。通常的对冲交易中的标的物都是相同的,而跨币种...

发明者量化
29分钟前
40
0
创龙基于TI TMS320C6748定点/浮点DSP C674x开发板的拓展IO信号、底板B2B连接器

TL138/1808/6748F-EVM是广州创龙基于SOM-TL138/1808/6748F核心板开发的一款开发板。由于SOM-TL138/1808/6748F核心板管脚兼容,所以此三个核心板共用同一个底板。开发板采用核心板+底板的设计...

Tronlong创龙
32分钟前
57
0
解决 Jenkins ERROR : Exception when publishing, exception message [Failure]

问题描述: 在使用 Jenkins 打包部署项目时候遇到异常,打包编译通过,只是没有部署上去,查看了控制台信息如下 ERROR: Exception when publishing, exception message [Failure]Build ste...

糊说八道
33分钟前
56
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部