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上。

时间: 2024-10-25 00:02:48

bitmap2drawable-两者的转化实现的相关文章

iOS开发之---将时间戳,转化成时间字符串。

1.将一个NSDate,转化成时间字符串. NSDate *date = [NSDate date]; NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @"yyyy-MM-dd"; NSString *dateStr = [fmt stringFromDate:date];

将华氏温度转换成摄氏温度或将摄氏温度转化成华氏温度。(需考虑多种不合法的情况尽量转化为合法的)

//华氏温度与摄氏温度转换,编写一个程序,将华氏温度转换成摄氏温度或将摄氏温度转化成华氏温度. //要求程序运行时从控制台读入温度值及单位,并输出另一种温度值及单位,例如:若用户输入27 C则 //程序输出 81F:若用户输入96 F,则程序输出36 C(其中C代表摄氏温度,F代表华氏温度),华氏温度与摄氏温度转化的公式为: //C = 5 (F - 32) / 9 //F = 9 C / 5 + 32 //要求输入的温度值是整数,输出的温度值也是四舍五入后的整数. package 第三天_练习

stringstream对基本类型之间的方便转化

stringstream利用流,可以对基本类型之间进行很方便的转化. 今天周赛标程里有,所以搜索了下,还觉得挺有用的,比sprintf好用,因为sprintf还要记住种种转换符号,烦都烦死了,这个利用流方便转化比较方便. 直接贴代码: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<sstream> using namespace std

android时间格式的转化,String,Date,long

long time=System.currentTimeMillis(); System.out.println(time); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date d1=new Date(time); String now=format.format(d1); System.out.println(now); long t = 0; try { java.

iview中使用Tag时进行数据的变化和实现将输入内容转化为标签输出数组

上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>iview example</title> <link rel="stylesheet" type="text/css" href="http://unpkg.com/iview/dist/styles/iview.css"

java中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数

转换成秒数 Date类有一个getTime()可以换回秒数,例如: public class DateToSecond { public static void main(String[] args) { Date date = new Date(System.currentTimeMillis()); System.out.println(date.getTime()); } } 与字符串格式相互转换 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; i

编写程序,要求用户输入英尺数,将其转化为米并显示。一英尺等于0.305米.

import java.util.Scanner; /** * @author 蓝色以太 * (将英尺转化为米)编写程序,要求用户输入英尺数,将其转化为米并显示.一英尺等于0.305米. */ public class Feet { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入英尺数:"); int feet=sc.nextInt()

java parse 带英文单词的日期字符串 转 date (转化新浪微博api返回的时间)

拂晓风起 专注前端技术cocos2d.js.flash.html5,联系:[email protected].如果读者要找腾讯工作机会,请不吝推荐简历. 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 227  文章- 0  评论- 336 java parse 带英文单词的日期字符串 转 date (转化新浪微博api返回的时间) 大家一般很少格式化或者parse带有Sun Nov等英文单词的字符串. 如果格式化英文月份的字符串,记得带上Locale.US参数,否则,JRE会按照当前地区

c语言进制转化

#include <stdio.h> // 进制转化 int main(void) { int i1 = 12; int i2 = 88; int i3 = 0x32C; printf("八进制输出i1 = %o\n", i1); // 14 printf("十六进制输出i2 = %x\n", i2); // 58 printf("十六进制输出i3 = %x\n", i3); // 32c printf("十进制输出i3 =

把json数据转化成对象

把json数据转化到一个对象中,再用对象直接调用 1 package com.lxj.register; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.net.MalformedURLException; 7 import java.net.URL; 8 9 import net.sf.json.JSONObjec