Pertanyaan Bagaimana cara mengubah Drawable ke Bitmap?


Saya ingin menetapkan tertentu Drawable sebagai wallpaper perangkat, tetapi semua fungsi wallpaper diterima Bitmaphanya. Saya tidak bisa menggunakannya WallpaperManager karena saya pra 2.1.

Juga, gambar saya diunduh dari web dan tidak disimpan di dalamnya R.drawable.


795
2018-06-14 07:46


asal


Jawaban:


Sepotong kode ini membantu.

Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.icon_resource);

Di sini versi di mana gambar diunduh.

String name = c.getString(str_url);
URL url_value = new URL(name);
ImageView profile = (ImageView)v.findViewById(R.id.vdo_icon);
if (profile != null) {
    Bitmap mIcon1 =
        BitmapFactory.decodeStream(url_value.openConnection().getInputStream());
    profile.setImageBitmap(mIcon1);
}

1134
2018-06-14 08:32



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

650
2018-05-15 12:33



Ini mengkonversi BitmapDrawable ke Bitmap.

Drawable d = ImagesArrayList.get(0);  
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();

195
2018-06-14 09:33



SEBUAH Drawable dapat ditarik ke a Canvas, dan a Canvas dapat didukung oleh Bitmap:

(Diperbarui untuk menangani konversi cepat untuk BitmapDrawabledan untuk memastikan bahwa Bitmap dibuat memiliki ukuran yang valid)

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

126
2018-02-22 07:35



Gunakan kode ini:

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

69
2017-11-20 18:58



sangat sederhana

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

31
2018-03-21 18:21



METODE 1 : Entah Anda dapat langsung mengkonversi ke bitmap seperti ini

Bitmap myLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_drawable);

METODE 2 : Anda bahkan dapat mengonversi sumber daya menjadi yang dapat digambar dan dari situ Anda bisa mendapatkan bitmap seperti ini

Bitmap myLogo = ((BitmapDrawable)getResources().getDrawable(R.drawable.logo)).getBitmap();

Untuk API> 22 getDrawable metode pindah ke ResourcesCompat kelas jadi untuk itu Anda melakukan sesuatu seperti ini

Bitmap myLogo = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), R.drawable.logo, null)).getBitmap();

13
2018-02-02 05:22



Mungkin ini akan membantu seseorang ...

Dari PictureDrawable ke Bitmap, gunakan:

private Bitmap pictureDrawableToBitmap(PictureDrawable pictureDrawable){ 
    Bitmap bmp = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(bmp); 
    canvas.drawPicture(pictureDrawable.getPicture()); 
    return bmp; 
}

... diimplementasikan seperti itu:

Bitmap bmp = pictureDrawableToBitmap((PictureDrawable) drawable);

12
2018-02-08 19:08



Jadi setelah mencari (dan menggunakan) jawaban yang lain, tampaknya semuanya ditangani ColorDrawable dan PaintDrawable sangat. (Terutama pada lollipop) sepertinya begitu Shaders tweak blok warna yang begitu padat tidak ditangani dengan benar.

Saya menggunakan kode berikut sekarang:

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

    // We ask for the bounds if they have been set as they would be most
    // correct, then we check we are  > 0
    final int width = !drawable.getBounds().isEmpty() ?
            drawable.getBounds().width() : drawable.getIntrinsicWidth();

    final int height = !drawable.getBounds().isEmpty() ?
            drawable.getBounds().height() : drawable.getIntrinsicHeight();

    // Now we check we are > 0
    final Bitmap bitmap = Bitmap.createBitmap(width <= 0 ? 1 : width, height <= 0 ? 1 : height,
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

Berbeda dengan yang lain, jika Anda menelepon setBounds pada Drawable sebelum meminta untuk mengubahnya menjadi bitmap, ia akan menggambar bitmap dengan ukuran yang benar!


10
2017-12-18 09:54



Di sini ada resolusi yang lebih baik

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

Kode dari Cara membaca bit yang dapat ditarik sebagai InputStream


9
2017-10-22 11:56



Android menyediakan solusi foward non straight: BitmapDrawable. Untuk mendapatkan Bitmap, kami harus menyediakan id sumber daya R.drawable.flower_pic ke a BitmapDrawable lalu mentransmisikannya ke a Bitmap.

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

7
2018-05-29 01:39