• bitmap2drawable-两者的转化实现


    先来看今天遇到的一个问题,是关于mms报错的。后来发现报的地方如下

    Bitmap deleteBitMap = ((BitmapDrawable)mChipDelete).getBitmap();
    Drawable mChipDelete = r.getDrawable(R.drawable.chip_delete);

    我发先,chip_delete,我用的是.9图片。报错信息

    java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable

    也就是说,点9图片不能转化为BitmapDrawable类型

    好了,废话不多说了,我们来总结下bitmap跟drawable的转化

    以下内容参考http://blog.csdn.net/sanjinxiong/article/details/9861547

    1.bitmap->drawable

        public static Drawable BitmapToDrawable(Bitmap bitmap) {  
            if (bitmap != null) {  
                return new BitmapDrawable(bitmap);  
            }   
            return null;  
              
      
        }

    上面的方法BitmapDrawable(bitmap)提示过时,这时候,我们用如下的方法就可以了

    new BitmapDrawable(getResources(),bitmap)

    2.drawable -> bitmap

        public static Bitmap drawableToBitmap(Drawable drawable) {  
            if (drawable instanceof BitmapDrawable) {  
                return ((BitmapDrawable) drawable).getBitmap();  
            } else if (drawable instanceof NinePatchDrawable) {  
                // 取 drawable 的长宽  
                int w = drawable.getIntrinsicWidth();  
                int h = drawable.getIntrinsicHeight();  
      
                // 取 drawable 的颜色格式  
                Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
                        : Bitmap.Config.RGB_565;  
                // 建立对应 bitmap  
                Bitmap bitmap = Bitmap.createBitmap(w, h, config);  
      
                // 建立对应 bitmap 的画布  
                Canvas canvas = new Canvas(bitmap);  
                drawable.setBounds(0, 0, w, h);  
                // 把 drawable 内容画到画布中  
                drawable.draw(canvas);  
      
                return bitmap;  
            } else {  
                return null;  
            }  
        } 

    这个要注意,因为drawable有普通跟.9的区别,这两种图片格式转化的方法是不一样的。普通的.9图片可以直接转化,也就是

    ((BitmapDrawable) drawable).getBitmap()

    而.9的就要复杂些,需要把drawable绘制到一个bitmap上。

  • 相关阅读:
    Math类操作数据
    java之静态方法与非静态方法
    使用Date和SimpleDateFormat类表示时间
    Java 中基本类型和字符串之间的转换
    Python基础
    生成对抗网络
    机器翻译
    语义角色标注
    个性化推荐
    词向量
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_bit2draw_15526104.html
Copyright © 2020-2023  润新知