天天看点

Android中Bitmap和Drawable

java代码  

resources res = getresources();  

bitmap bmp = bitmapfactory.decoderesource(res, r.drawable.icon);  

public byte[] bitmap2bytes(bitmap bm) {  

    bytearrayoutputstream baos = new bytearrayoutputstream();  

    bm.compress(bitmap.compressformat.png, 100, baos);  

    return baos.tobytearray();  

}  

public bitmap bytes2bimap(byte[] b) {  

    if (b.length != 0) {  

        return bitmapfactory.decodebytearray(b, 0, b.length);  

    } else {  

        return null;  

    }  

public static bitmap zoombitmap(bitmap bitmap, int width, int height) {  

    int w = bitmap.getwidth();  

    int h = bitmap.getheight();  

    matrix matrix = new matrix();  

    float scalewidth = ((float) width / w);  

    float scaleheight = ((float) height / h);  

    matrix.postscale(scalewidth, scaleheight);  

    bitmap newbmp = bitmap.createbitmap(bitmap, 0, 0, w, h, matrix, true);  

    return newbmp;  

public static bitmap drawabletobitmap(drawable drawable) {  

        // 取 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;  

public static bitmap getroundedcornerbitmap(bitmap bitmap, float roundpx) {  

    bitmap output = bitmap.createbitmap(w, h, config.argb_8888);  

    canvas canvas = new canvas(output);  

    final int color = 0xff424242;  

    final paint paint = new paint();  

    final rect rect = new rect(0, 0, w, h);  

    final rectf rectf = new rectf(rect);  

    paint.setantialias(true);  

    canvas.drawargb(0, 0, 0, 0);  

    paint.setcolor(color);  

    canvas.drawroundrect(rectf, roundpx, roundpx, paint);  

    paint.setxfermode(new porterduffxfermode(mode.src_in));  

    canvas.drawbitmap(bitmap, rect, rect, paint);  

    return output;  

public static bitmap createreflectionimagewithorigin(bitmap bitmap) {  

    final int reflectiongap = 4;  

    matrix.prescale(1, -1);  

    bitmap reflectionimage = bitmap.createbitmap(bitmap, 0, h / 2, w,  

            h / 2, matrix, false);  

    bitmap bitmapwithreflection = bitmap.createbitmap(w, (h + h / 2),  

            config.argb_8888);  

    canvas canvas = new canvas(bitmapwithreflection);  

    canvas.drawbitmap(bitmap, 0, 0, null);  

    paint deafalutpaint = new paint();  

    canvas.drawrect(0, h, w, h + reflectiongap, deafalutpaint);  

    canvas.drawbitmap(reflectionimage, 0, h + reflectiongap, null);  

    paint paint = new paint();  

    lineargradient shader = new lineargradient(0, bitmap.getheight(), 0,  

            bitmapwithreflection.getheight() + reflectiongap, 0x70ffffff,  

            0x00ffffff, tilemode.clamp);  

    paint.setshader(shader);  

    // set the transfer mode to be porter duff and destination in  

    paint.setxfermode(new porterduffxfermode(mode.dst_in));  

    // draw a rectangle using the paint with our linear gradient  

    canvas.drawrect(0, h, w, bitmapwithreflection.getheight()  

            + reflectiongap, paint);  

    return bitmapwithreflection;  

bitmap bm=xxx; //xxx根据你的情况获取  

bitmapdrawable bd= new bitmapdrawable(getresource(), bm);   

因为btimapdrawable是drawable的子类,最终直接使用bd对象即可。  

public static drawable zoomdrawable(drawable drawable, int w, int h) {  

    int width = drawable.getintrinsicwidth();  

    int height = drawable.getintrinsicheight();  

    // drawable转换成bitmap  

    bitmap oldbmp = drawabletobitmap(drawable);  

    // 创建操作图片用的matrix对象  

    // 计算缩放比例  

    float sx = ((float) w / width);  

    float sy = ((float) h / height);  

    // 设置缩放比例  

    matrix.postscale(sx, sy);  

    // 建立新的bitmap,其内容是对原bitmap的缩放后的图  

    bitmap newbmp = bitmap.createbitmap(oldbmp, 0, 0, width, height,  

            matrix, true);  

    return new bitmapdrawable(newbmp);