android एक ड्रायटेबल को बिटमैप में कैसे परिवर्तित करें?




bitmap wallpaper (12)

तो दूसरे उत्तरों की तलाश (और उपयोग) के बाद, ऐसा लगता है कि वे सभी ColorDrawable और PaintDrawable बुरी तरह से संभालने में ColorDrawable । (विशेष रूप से लॉलीपॉप पर) लग रहा था कि Shader को tweaked रंगों के इतने ठोस ब्लॉक सही ढंग से संभाला नहीं गया था।

मैं अब निम्नलिखित कोड का उपयोग कर रहा हूं:

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

दूसरों के विपरीत, यदि आप इसे बिटमैप में बदलने के लिए कहने से पहले setBounds पर setBounds कहते हैं, तो यह बिटमैप को सही आकार में खींच देगा!

मैं डिवाइस के वॉलपेपर के रूप में एक निश्चित Drawable सेट करना चाहता हूं, लेकिन सभी वॉलपेपर फ़ंक्शन Bitmap स्वीकार करते हैं। मैं WallpaperManager उपयोग नहीं कर सकता क्योंकि मैं पूर्व 2.1 हूं।

इसके अलावा, मेरे drawables वेब से डाउनलोड होते हैं और R.drawable में रहते हैं।


यह एक बिटमैप ड्रायबल को बिटमैप में परिवर्तित करता है।

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

एंड्रॉइड एक गैर सीधे BitmapDrawable समाधान प्रदान करता है: BitmapDrawable । बिटमैप प्राप्त करने के लिए, हमें संसाधन आईडी R.drawable.flower_pic को Bitmap R.drawable.flower_pic प्रदान करना BitmapDrawable और फिर इसे Bitmap डालना होगा।

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

विधि 1 : या तो आप सीधे इस तरह बिटमैप में परिवर्तित कर सकते हैं

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

विधि 2 : आप संसाधन को खींचने योग्य में भी परिवर्तित कर सकते हैं और इससे आप इस तरह बिटमैप प्राप्त कर सकते हैं

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

एपीआई के लिए> 22 getDrawable विधि ResourcesCompat getDrawable क्लास में ले जाया गया ताकि आप ऐसा कुछ कर सकें

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

इस कोड का प्रयोग करें:

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

यहां @ क्रिस.जेनकिन्स द्वारा दिए गए उत्तर का अच्छा कोटलिन संस्करण यहां दिया गया है: https://.com/a/27543712/1016462

fun Drawable.toBitmap(): Bitmap {
  if (this is BitmapDrawable) {
    return bitmap
  }

  val width = if (bounds.isEmpty) intrinsicWidth else bounds.width()
  val height = if (bounds.isEmpty) intrinsicHeight else bounds.height()

  return Bitmap.createBitmap(width.nonZero(), height.nonZero(), Bitmap.Config.ARGB_8888).also {
    val canvas = Canvas(it)
    setBounds(0, 0, canvas.width, canvas.height)
    draw(canvas)
  }
}

private fun Int.nonZero() = if (this <= 0) 1 else this

यहां बेहतर संकल्प है

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

इनपुटस्ट्रीम के रूप में खींचने योग्य बिट्स को पढ़ने के तरीके से कोड


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

एक Drawable को Canvas पर खींचा जा सकता है, और Canvas को Bitmap द्वारा समर्थित किया जा सकता है:

( Bitmap BitmapDrawable एस के लिए त्वरित रूपांतरण को संभालने के लिए अपडेट किया गया है और यह सुनिश्चित करने के लिए कि Bitmap के पास वैध आकार है)

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

कोड का यह टुकड़ा मदद करता है।

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

यहां एक संस्करण जहां छवि डाउनलोड हो जाती है।

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

शायद यह किसी की मदद करेगा ...

पिक्चरडाउबल से बिटमैप तक, इसका उपयोग करें:

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

... इस तरह कार्यान्वित किया गया:

Bitmap bmp = pictureDrawableToBitmap((PictureDrawable) drawable);




android-drawable