`

Android中Bitmap和Drawable

 
阅读更多
一、相关概念

1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象

2、Canvas画布,绘图的目的区域,用于绘图

3、Bitmap位图,用于图的处理

4、Matrix矩阵

二、Bitmap
1、从资源中获取Bitmap
Java代码  收藏代码

    Resources res = getResources(); 
    Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon); 


2、Bitmap → byte[]
Java代码  收藏代码

    public byte[] Bitmap2Bytes(Bitmap bm) { 
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos); 
        return baos.toByteArray(); 
    } 

3、byte[] → Bitmap
Java代码  收藏代码

    public Bitmap Bytes2Bimap(byte[] b) { 
        if (b.length != 0) { 
            return BitmapFactory.decodeByteArray(b, 0, b.length); 
        } else { 
            return null; 
        } 
    } 

4、Bitmap缩放
Java代码  收藏代码

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

  5、将Drawable转化为Bitmap
Java代码  收藏代码

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

6、获得圆角图片
Java代码  收藏代码

    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) { 
        int w = bitmap.getWidth(); 
        int h = bitmap.getHeight(); 
        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; 
    } 

7、获得带倒影的图片
Java代码  收藏代码

    public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) { 
        final int reflectionGap = 4; 
        int w = bitmap.getWidth(); 
        int h = bitmap.getHeight(); 
     
        Matrix matrix = new Matrix(); 
        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; 
    } 

三、Drawable
1、Bitmap转换成Drawable
Java代码  收藏代码

    Bitmap bm=xxx; //xxx根据你的情况获取 
    BitmapDrawable bd= new BitmapDrawable(getResource(), bm);  
    因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。 

2、Drawable缩放
Java代码  收藏代码

    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对象 
        Matrix matrix = new 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); 
    } 

分享到:
评论

相关推荐

    Android Drawable Bitmap 相互转换

    在Android开发中,Drawable和Bitmap是两种常用的图像资源类型,它们各有特点且在不同场景下有不同的优势。了解和掌握它们之间的相互转换对于优化性能和提高用户体验至关重要。本篇将详细介绍如何在Android中进行...

    Android Bitmap和Drawable的对比

    Android Bitmap和Drawable的对比 Android Bitmap和Drawable是Android平台中两种常见的图形对象,虽然它们都可以用来显示图像,但是它们之间有着很大的区别。本文将对Android Bitmap和Drawable进行对比,帮助开发者...

    android 画图 bitmap drawable canvas paint

    在Android平台上,绘制图形是一项基本任务,涉及到多个关键类,如Bitmap、Drawable和Canvas,以及Paint。这些类共同构成了Android图形系统的核心,使得开发者能够创建丰富的用户界面和自定义视图。 首先,Bitmap是...

    Drawable Bitmap之间的转化

    通过上述方法,开发者可以根据实际需求灵活地在`Drawable`和`Bitmap`之间进行转换,从而更好地处理Android应用中的图像资源管理问题。这些转换技巧对于优化用户体验、提高应用性能都有着重要的意义。

    Android Drawable、Bitmap、byte、灰度 转换

    在Android开发中,图片资源的处理是常见的需求之一,涉及到多种数据类型之间的转换,包括`Drawable`、`Bitmap`、`byte[]`等。本文将详细介绍这些类型之间的转换方法,以及如何实现灰度图像的转换。 ### 1. `...

    Android Bitmap和Drawable相互转换的简单代码

    很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。  一、Bitmap转Drawable 代码如下: Bitmap bm=xxx; //xxx根据你的情况获取  BitmapDrawable bd...

    android中的drawable集合

    例如,可以将一个背景色、一个边框和一个图标组合在一个Drawable中。通过设置层的顺序和属性,可以实现不同的视觉效果。 4. **Transition Drawable**: Transition Drawable用于实现Drawable之间的平滑过渡,常用于...

    Android Drawable、Bitmap、byte、灰度 之间的转换

    在Android开发中,图片资源的处理是常见的需求之一,尤其涉及到不同格式间的转换,如Drawable、Bitmap、byte数组以及灰度图像的转换。这些转换在实际应用中具有重要意义,不仅能够优化内存使用,还能实现图像的高效...

    android_Drawable、Bitmap、byte[]之间的转换.doc

    ### Android中Drawable、Bitmap与byte[]之间的转换 在Android应用开发过程中,经常需要对图像资源进行处理,这就涉及到了不同图像格式之间的转换。本文将详细介绍`Drawable`、`Bitmap`及`byte[]`三者之间的转换方法...

    Android应用源码之android-gif-drawable 支持fig显示的view.zip

    `android-gif-drawable`是一个流行的开源库,专门用于在Android应用中渲染和播放GIF图像。这个库提供了高效且灵活的方式来处理GIF动画,使其能够在各种视图组件上显示,包括自定义View。下面我们将深入探讨这个库的...

    Android Drawable和Bitmap的转换实例详解

    Android Drawable和Bitmap的转换实例详解 通常我们需要通过代码去设置图片,就需要设置图片Bitmap和Drawable的转换,下面整理了几种方式 一、Bitmap转Drawable Bitmap bm=xxx; //xxx根据你的情况获取 ...

    android Bitmap用法总结

    Bitmap是Android平台中用于处理图像的核心类,它用于表示位图图像数据。下面是对Bitmap用法的详细总结: 1. **Drawable转换为Bitmap**: 当我们需要将一个Drawable对象(如从XML布局文件中加载的图像)转换为...

    Android下利用Bitmap切割图片

    在Android开发中,Bitmap是处理图像的基本类,用于在内存中表示位图图像。当我们需要对图片进行裁剪、缩放或进行其他操作时,Bitmap提供了丰富的功能。本篇文章将详细探讨如何在Android环境下利用Bitmap来切割图片。...

    自定义Drawable 实现图片圆角、圆形、椭圆形

    在Android开发中,自定义Drawable是提升应用UI个性化和性能优化的重要手段。本文将深入探讨如何通过自定义Drawable实现图片的圆角、圆形以及椭圆形显示,帮助开发者更好地理解和运用这一技术。 首先,我们了解...

    android-gif-drawable-dem

    相比直接使用Android原生的Bitmap和Canvas来处理GIF,`android-gif-drawable`库提供了更为便捷和高效的解决方案。 在Android应用中集成`android-gif-drawable`库,通常需要以下步骤: 1. **添加依赖**:在你的`...

    java_一些图片管理工具类的标准代码_android_bitmap转drawable_高斯模糊代码

    读取本地drawable中较大的资源图片 从文件得到BitMap 从数组得到Bitmap 从流中得到Bitmap 图片透明度处理 获取源图片的BITMAP,压缩,本地图片 bitmap转byte[] 获取缩略图 保存图片 光晕效果 获取bitmap的字节大小 ...

    Android中区别Drawable Bitmap Canvas Paint

    很多网友刚刚开始学习Android平台,对于Drawable、Bitmap、Canvas和Paint它们之间的概念不是很清楚,其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap、Canvas相关的都有所变化。...

    Android Drawable 全部 xml 元素和属性用法

    在Android开发中,Drawable是图形资源的核心组成部分,用于表示各种屏幕元素的外观,如按钮、背景、图标的形状和颜色。这些图形资源可以通过XML文件进行定义,提供了丰富的自定义选项。本篇将深入探讨Android ...

Global site tag (gtag.js) - Google Analytics