ඇඳිය හැකි දේ බිට්මැප් බවට පරිවර්තනය කරන්නේ කෙසේද?


969

Drawableඋපාංගයේ බිතුපත ලෙස නිශ්චිත එකක් සැකසීමට මම කැමතියි , නමුත් සියලුම බිතුපත් කාර්යයන් පිළිගන්නේ ඒවා Bitmapපමණි. මම WallpaperManager2.1 ට පෙර සිටින නිසා මට භාවිතා කළ නොහැක .

එසේම, මගේ ලාච්චු වෙබයෙන් බාගත කර ඇති අතර ඒවා වාසය නොකරයි R.drawable.



1
කරුණාකර නිවැරදි පිළිතුර තෝරන්න, මෙය: stackoverflow.com/a/3035869/4548520
user25

Answers:


1305

මෙම කේත කොටස උපකාරී වේ.

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

1
මම හිතන්නේ ඔබට url අගයන් ඇත. එවිට මගේ සංස්කරණය කළ පිළිතුර උදව් විය යුතුය.
ප්‍රවීන්

str_url පැමිණෙන්නේ කොහෙන්ද? මට නූල් සම්බන්ධ ඇඳිය ​​හැකි ශ්‍රිතයක් සොයාගත නොහැකි විය ... ඔබගේ උදව්වට ස්තූතියි.
රොබ්

12
මම සිතන්නේ මට යමක් හමු වූ බවයි: "දිනුම්" යනු මට බිට්මැප් බවට පරිවර්තනය කිරීමට අවශ්‍ය නම්: බිට්මැප් බිට්මැප් = ((බිට්මැප් ඩ්‍රෝබල්) දිනුම් ඇදීම) .getBitmap (); උපක්‍රමය කරයි!
රොබ්

1
Ob රොබ්: ඔබේ ඇඳිය ​​හැකි දේ බිට්මැප් ඩ්‍රයිව් එකක් නම් පමණි. (එයින් අදහස් කරන්නේ ඔබේ ඇඳිය ​​හැකි දේ බිට්මැප් වටා එතීම පමණක් බවයි)
njzk2

2
සටහන: මෙය JPG සමඟ දැවැන්ත java.lang.OutOfMemoryError ඇති කරයි
කවුරුහරි කොහේ හරි

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

44
මෙය ඕනෑම ආකාරයක ඇඳිය ​​හැකි වැඩකටයුතු සඳහා ඇති එකම පිළිතුර සේ පෙනෙන අතර දැනටමත් බිට්මැප් ඩ්‍රෝවර් කළ හැකි ඇඳිය ​​හැකි දේ සඳහා ඉක්මන් විසඳුමක් ඇත. +1
මැට් වුල්ෆ්

1
එක් සංශෝධනයක් පමණි: Dits BitmapDrawable.getBitmap () ගැන පවසන්නේ එය නැවත ශුන්‍ය විය හැකි බවයි. මම කියන්නේ එය දැනටමත් ප්‍රතිචක්‍රීකරණය කර ඇති බවයි.
කෙලොග්ස්

17
පරෙස්සම් වන්න: getIntrinsicWidth()හා getIntrinsicHieght()ආපසු -1 drawable ඝන වර්ණ නම්.
එස්ඩී

5
ඉතින් ... ColorDrawable සඳහා තවත් චෙක්පතක්, අපට ජයග්‍රාහකයෙක් සිටී. බරපතල ලෙස, යමෙකු මෙය පිළිගත් පිළිතුර බවට පත් කරයි.
kaay

2
සලකුණු කළ පිළිතුරට පටහැනිව, මෙය ප්‍රශ්නයට පිළිතුරු සපයයි.
njzk2

216

මෙය BitmapDrawable එකක් Bitmap බවට පරිවර්තනය කරයි.

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

9
ඇත්තෙන්ම මෙය හොඳම ක්‍රමයද? නිසැකවම ඇඳිය ​​හැකි දේ වෙනත් වර්ගයක් විය හැකි අතර මෙය ධාවන කාල ව්‍යතිරේකයක් විසි කරයිද? උදාහරණයක් ලෙස එය නව පැච් ඩ්‍රෝබල් එකක් විය හැකිද ...?
ඩොරි

4
Ordori ඔබට කේතය BitmapDrawableවාත්තු කිරීමට පෙර එය ඇත්ත වශයෙන්ම තිබේදැයි පරීක්ෂා කිරීම සඳහා කොන්දේසි සහිත ප්‍රකාශයකින් ඔතා තැබිය හැකිය : if (d instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); }
ටෝනි චාන්

374
උඩුකුරු 64 විශ්වාස කළ නොහැකිද? එම කේතය පැහැදිලිවම ක්‍රියාත්මක වන්නේ dදැනටමත් a නම් පමණක් වන අතර BitmapDrawable, එය බිටු සිතියමක් ලෙස ලබා ගැනීම සුළුපටු නොවේ ... ClassCastExceptionඅනෙක් සියලුම අවස්ථාවන්හිදී එය බිඳ වැටෙනු ඇත.
මතියස්

3
At මතියස් ඒ බව සඳහන් නොකල යුතුය .. එම කතුවරයාටම ඡන්ද 100 ක් ඇත: /
quinestor

2
මෙය ඉතා සුළු කාරණයකට විශේෂීකරණය වී ඇත.
njzk2

143

A Drawableවෙත a වෙතට ඇද ගත හැකි අතර Canvas, a Canvasමඟින් පිටුබලය දැක්විය හැකිය Bitmap:

( BitmapDrawableS සඳහා ඉක්මන් පරිවර්තනයක් හැසිරවීමට සහ 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;
}

ඇද ගත හැකි පරාමිතිය ශුන්‍ය නම් කුමක් සිදුවේද?
hrules6872

1
මෙම ක්‍රමය VectorDrawable සඳහා සහාය නොදක්වයි
මහමුද්


ඔබට හිස් නොවන ඇඳිය ​​හැකි යැයි උපකල්පනය කළහොත්, පළල සහ උස 0 නොවේදැයි පරීක්ෂා කර බැලිය යුත්තේ ඇයි? එසේම, ඔබ සෙට්බවුන්ඩ්ස් () එකම ප්‍රමාණයේ නම් භාවිතා කිරීමට අවශ්‍ය ඇයි?
යෝව් ෆියර්ස්ටයින්

හොඳ විසඳුම! Android 8.0 / sdk 26 ApplicationInfo.loadIcon (PackageManager pm) විසින් AdaptiveIconDrawable එකක් ආපසු එවන්න your ඔබේ කේතය භාවිතා කිරීමෙන් මට AdaptiveIconDrawable බිට්මැප් කිරීමට වාත්තු කළ හැකිය
bur

47

ක්‍රමය 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();

ResourcesCompat වැඩ කරන්නේ අඳින්න පුළුවන් BitmapDrawable නම්, ඔබ VectorDrawable භාවිතා කරන්නේ නම්, එවිට ඔබට CCE එකක් ලැබෙනු ඇත.
බ්‍රිල් පැපින්

මේ දෙකම VectorDrawable සම්පතක් සමඟ ක්‍රියා නොකරයි . පහත දෝෂය ඇතිවේ -android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
ඇඩම් හර්විට්ස්

මෙම විසඳුම කොට්ලින් සමඟ හොඳින් ක්රියා කරයි.
ඇඩම් හර්විට්ස්


16

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

1
VectorDrawableකොට්ලින් හි ඇති සරලම විසඳුම මෙයයි! ද හවුල් මෙතන මේ SO පශ්චාත් වැඩි විස්තර.
ඇඩම් හර්විට්ස්

15

එබැවින් අනෙක් පිළිතුරු බැලීමෙන් (සහ භාවිතා කිරීමෙන්), ඒවා සියල්ලම හැසිරවීම ColorDrawableහා PaintDrawableනරක ලෙස පෙනේ . (විශේෂයෙන් ලොලිපොප් මත) Shaders අකුරු කර ඇති බැවින් solid න වර්ණ කොටස් නිවැරදිව හසුරුවනු නොලැබේ.

මම දැන් පහත කේතය භාවිතා කරමි:

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මත Drawableඇති දෛශිකමය බවට හැරවීම සඳහා ඉල්ලා පෙර, එය දෛශිකමය නිවැරදි ප්රමාණය දී උකහා ඇත!


සෙට්බවුන්ඩ්ස් විසින් ඇද ගත හැකි පෙර සීමාවන් විනාශ නොකරන්නේද? එය ගබඩා කර පසුව යථා තත්වයට පත් කිරීම වඩා හොඳ නොවේද?
ඇන්ඩ්‍රොයිඩ් සංවර්ධක

@androiddeveloper, සීමාවන් සකසා ඇත්නම්, අපි ඒවා කෙසේ හෝ භාවිතා කරමු. සමහර අවස්ථා වලදී මෙය අවශ්‍ය වන්නේ සීමාවන් නියම කර නොමැති අතර සහජ ප්‍රමාණයක් නොමැති විටය (සමහර අවස්ථාවල ColorDrawables වැනි). එබැවින් පළල සහ උස 0 වනු ඇත, අපි ඇද ගත හැකි 1x1 ලබා දෙන්නේ එය ඇත්ත වශයෙන්ම යමක් ඇද ගන්නා ආකාරයටය. එවැනි අවස්ථා වලදී අපට ColorDrawable සඳහා වර්ගයේ පරීක්‍ෂණයක් කළ හැකි යැයි මට තර්ක කළ හැකිය, නමුත් මෙය 99% ක්ම ක්‍රියාත්මක වේ. (ඔබේ අවශ්‍යතා සඳහා ඔබට එය වෙනස් කළ හැකිය).
ක්‍රිස්.ජෙන්කින්ස්

@ ක්‍රිස්.ජෙන්කින්ස් එයට සීමාවන් නොමැති නම්, දැන් එයට නව ඒවා ලැබෙනු ඇත්ද? මම තවත් ප්‍රශ්නයක් ඇසීමට කැමැත්තෙමි: ආපසු ලැබෙන බිට්මැප් ප්‍රමාණය (බිට්මැප් ඩ්‍රැවබල් සඳහා පවා) සැකසීමට හොඳම ක්‍රමය කුමක්ද?
ඇන්ඩ්‍රොයිඩ් සංවර්ධක

කේතය හොඳින් කියවන ලෙස මම ඔබට යෝජනා කරමි. Drawableසීමාවන් නොමැති නම් එය භාවිතා කරයි IntrinsicWidth/Height. ඒවා දෙකම <= 0 නම් අපි කැන්වසය 1px ලෙස සකසමු. Drawableසීමාවන් නොමැති නම් ඔබ නිවැරදියි (1x1 බොහෝ අවස්ථාවන්), නමුත් මෙය අවශ්‍ය වන්නේ ColorDrawableඅභ්‍යන්තර ප්‍රමාණ නොමැති දේවල් සඳහා ය. අපි මෙය නොකළේ නම්, එය විසි කරයි Exception, ඔබට 0x0 කැන්වසයකට ඇද ගත නොහැක.
ක්‍රිස්.ජෙන්කින්ස්

1
mutate()මුල් ඇඳීම් පමණක් ඉතිරි කර පිටපතක් සාදනු ඇති අතර එමඟින් මුල් සීමාවන් පසුකර යාමේ ගැටළුව මග හැරෙනු ඇත. එම කරුණු මත පදනම්ව කේතය වෙනස් කිරීම මම කලාතුරකිනි. ඔබේ භාවිත නඩුවට එය අවශ්‍ය නම් තවත් පිළිතුරක් එක් කරන්න. බිට්මැප් පරිමාණය සඳහා තවත් ප්‍රශ්නයක් නිර්මාණය කිරීමට මම යෝජනා කරමි.
ක්‍රිස්.ජෙන්කින්ස්

14

1) බිට්මැප් වෙත ඇද ගත හැකි:

Bitmap mIcon = BitmapFactory.decodeResource(context.getResources(),R.drawable.icon);
// mImageView.setImageBitmap(mIcon);

2) අඳින්නට හැකි බිට්මැප්:

Drawable mDrawable = new BitmapDrawable(getResources(), bitmap);
// mImageView.setDrawable(mDrawable);

13

සමහර විට මෙය යමෙකුට උපකාරී වනු ඇත ...

PictureDrawable සිට Bitmap දක්වා, භාවිතා කරන්න:

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

රොබ්ගේ පිළිතුර මෙන්, ඔබට නිශ්චිත වර්ගයක් අවශ්‍ය වේ Drawable, මේ අවස්ථාවේ දී a PictureDrawable.
කබුකෝ

4
"සමහර විට මෙය යමෙකුට උපකාරී වනු ඇත ..."
මවුරෝ

11

මෙන්න වඩා හොඳ විභේදනය

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 ලෙස ඇද ගත හැකි බිටු කියවන්නේ කෙසේද යන්න පිළිබඳ කේතය


10

@ ක්‍රිස්.ජෙන්කින්ස් විසින් සපයන ලද පිළිතුරේ ලස්සන කොට්ලින් අනුවාදය මෙන්න: https://stackoverflow.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

8

ඇන්ඩ්‍රොයිඩ් සෘජු නොවන විසඳුමක් සපයයි : BitmapDrawable. Bitmap ලබා ගැනීම සඳහා, අපට R.drawable.flower_pica වෙත සම්පත් හැඳුනුම්පත ලබා දිය යුතු BitmapDrawableඅතර පසුව එය a වෙත දමන්න Bitmap.

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


5

මෙම code.it භාවිතා කිරීම ඔබේ ඉලක්කය සපුරා ගැනීමට උපකාරී වේ.

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

3

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

2

ඔබ කොට්ලින් භාවිතා කරන්නේ නම් පහත කේතය භාවිතා කරන්න. ඒක වැඩ කරයි

// රූප මාර්ගය භාවිතා කිරීම සඳහා

val image = Drawable.createFromPath(path)
val bitmap = (image as BitmapDrawable).bitmap

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

මම හිතන්නේ ඔබ ප්‍රශ්නය වැරදියට කියෙව්වා. ප්රශ්නය අසයි: පද්ධති ගැලරිය නොව ඇද ගත හැකි සම්පත් වලින් බිට්මැප් ලබා ගන්නේ කෙසේද
kc ochibili

1

ImageWorker පුස්තකාලයට බිට්මැප් ඇඳිය ​​හැකි හෝ පදනම් 64 බවට පරිවර්තනය කළ හැකිය.

val bitmap: Bitmap? = ImageWorker.convert().drawableToBitmap(sourceDrawable)

ක්‍රියාත්මක කිරීම

ව්‍යාපෘති මට්ටමේ ශ්‍රේණියේ

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

යෙදුම් මට්ටමේ ශ්‍රේණියේ

dependencies {
            implementation 'com.github.1AboveAll:ImageWorker:0.51'
    }

ඔබට බාහිරින් බිට්මැප් / ඩ්‍රයිබල් / බේස් 64 පින්තූර ගබඩා කර ලබා ගත හැකිය.

මෙහි පරීක්ෂා කරන්න. https://github.com/1AboveAll/ImageWorker/edit/master/README.md


1

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

උදාහරණයක් ලෙස ඔබේ ඇඳිය ​​හැකි ස්ථර ලැයිස්තුවක් ඇඳිය ​​හැකි නම් එය ශුන්‍ය ප්‍රතිචාරයක් ලබා දෙයි, එබැවින් විකල්පයක් ලෙස ඔබේ ඇඳිය ​​හැකි දේ කැන්වස් වෙතට ඇදගෙන බිට්මැප් ලෙස සුරකින්න, කරුණාකර කේත කෝප්පයක් පහතින් බලන්න.

public void drawableToBitMap(Context context, int drawable, int widthPixels, int heightPixels) {
    try {
        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/", "drawable.png");
        FileOutputStream fOut = new FileOutputStream(file);
        Drawable drw = ResourcesCompat.getDrawable(context.getResources(), drawable, null);
        if (drw != null) {
            convertToBitmap(drw, widthPixels, heightPixels).compress(Bitmap.CompressFormat.PNG, 100, fOut);
        }
        fOut.flush();
        fOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
    Bitmap bitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, widthPixels, heightPixels);
    drawable.draw(canvas);
    return bitmap;
}

ඉහත කේතය සුරකින්න ඔබට බාගැනීම් නාමාවලියෙහි drawable.png ලෙස ඇද ගත හැකිය

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.