Как преобразовать Drawable в растровое изображение? - PullRequest
877 голосов
/ 14 июня 2010

Я хотел бы установить определенный Drawable в качестве обоев устройства, но все функции обоев принимают только Bitmap с.Я не могу использовать WallpaperManager, потому что я до 2.1.

Кроме того, мои документы загружаются из Интернета и не находятся в R.drawable.

Ответы [ 16 ]

8 голосов
/ 29 мая 2014

Android предоставляет не прямое решение: BitmapDrawable. Чтобы получить растровое изображение, мы должны предоставить идентификатор ресурса R.drawable.flower_pic для a BitmapDrawable и затем привести его к Bitmap.

Bitmap bm = ((BitmapDrawable) getResources().getDrawable(R.drawable.flower_pic)).getBitmap();
5 голосов
/ 30 мая 2014

Используйте этот код. Это поможет вам в достижении вашей цели.

 Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.profileimage);
    if (bmp!=null) {
        Bitmap bitmap_round=getRoundedShape(bmp);
        if (bitmap_round!=null) {
            profileimage.setImageBitmap(bitmap_round);
        }
    }

  public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
    int targetWidth = 100;
    int targetHeight = 100;
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
            targetHeight,Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
    path.addCircle(((float) targetWidth - 1) / 2,
            ((float) targetHeight - 1) / 2,
            (Math.min(((float) targetWidth), 
                    ((float) targetHeight)) / 2),
                    Path.Direction.CCW);

    canvas.clipPath(path);
    Bitmap sourceBitmap = scaleBitmapImage;
    canvas.drawBitmap(sourceBitmap, 
            new Rect(0, 0, sourceBitmap.getWidth(),
                    sourceBitmap.getHeight()), 
                    new Rect(0, 0, targetWidth, targetHeight), new Paint(Paint.FILTER_BITMAP_FLAG));
    return targetBitmap;
}
1 голос
/ 09 декабря 2018

Библиотека ImageWorker может конвертировать растровое изображение в drawable или 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

1 голос
/ 21 декабря 2012
 // 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);
        }
    }
}
0 голосов
/ 09 июля 2019

BitmapFactory.decodeResource() автоматически масштабирует растровое изображение, поэтому ваше растровое изображение может оказаться нечетким. Чтобы предотвратить масштабирование, сделайте это:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(context.getResources(),
                                             R.drawable.resource_name, options);

или

InputStream is = context.getResources().openRawResource(R.drawable.resource_name)
bitmap = BitmapFactory.decodeStream(is);
0 голосов
/ 05 июня 2019

Android-KTX имеет Drawable.toBitmap метод: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.html

Из Котлина

val bitmap = myDrawable.toBitmap()
...