我想设置一个特定的Drawable作为设备的壁纸,但所有的壁纸功能只接受位图。我不能使用WallpaperManager,因为我是pre 2.1。
另外,我的drawables是从网上下载的,并不存在于R.drawable中。
我想设置一个特定的Drawable作为设备的壁纸,但所有的壁纸功能只接受位图。我不能使用WallpaperManager,因为我是pre 2.1。
另外,我的drawables是从网上下载的,并不存在于R.drawable中。
当前回答
这将BitmapDrawable转换为Bitmap。
Drawable d = ImagesArrayList.get(0);
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
其他回答
// 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);
}
}
}
一个可绘制对象可以被绘制到画布上,一个画布可以被位图支持:
(更新到处理BitmapDrawables的快速转换,并确保创建的位图具有有效的大小)
public static Bitmap drawableToBitmap (Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
int width = drawable.getIntrinsicWidth();
width = width > 0 ? width : 1;
int height = drawable.getIntrinsicHeight();
height = height > 0 ? height : 1;
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
非常简单的
Bitmap tempBMP = BitmapFactory.decodeResource(getResources(),R.drawable.image);
方法1:你可以像这样直接转换成位图
Bitmap myLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_drawable);
方法2:你甚至可以把资源转换成可绘制的,从那里你可以得到像这样的位图
Bitmap myLogo = ((BitmapDrawable)getResources().getDrawable(R.drawable.logo)).getBitmap();
对于API > 22 getDrawable方法移动到ResourcesCompat类,因此你可以这样做
Bitmap myLogo = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), R.drawable.logo, null)).getBitmap();
ImageWorker库可以将位图转换为可绘制或base64,反之亦然。
val bitmap: Bitmap? = ImageWorker.convert().drawableToBitmap(sourceDrawable)
实现
在项目级别Gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在应用级Gradle
dependencies {
implementation 'com.github.1AboveAll:ImageWorker:0.51'
}
您还可以从外部存储和检索位图/绘图/base64图像。
检查在这里。https://github.com/1AboveAll/ImageWorker/edit/master/README.md