Drawable 与byte 之间的互相转换

最近的任务需要把Drawable保存到数据库,在这里想到的方法就是把Drawable 转换为byte存起来

 

复制代码
public class BitmapUtil {

    /**
     * 将drawable 图像转化成二进制字节数组
     * @param drawable  要转化drawable对象
     * @return byte[]
     */
    public static byte[] getDrawableByte(Drawable drawable) {
        Bitmap bitmap = Bitmap
                .createBitmap(
                        drawable.getIntrinsicWidth(),
                        drawable.getIntrinsicHeight(),
                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                                : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);

        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        // 创建一个字节数组输出流
        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        //设置位图的压缩格式,质量为100%,并放入字节数组输出流中
        //选择Bitmap.CompressFormat.PNG,不然把byte[]转换成drawable图像会有黑色背景
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

        // 将字节数组输出流转化为字节数组byte[]
        byte[] bitmapdata = stream.toByteArray();
        return bitmapdata;
    }

    /**
     * 将二进制字节数组 转化成 drawable 图像
     * @param bytes
     * @return
     */
    public static Drawable getDrawable(byte[] bytes,Context context) {
        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        BitmapDrawable bd = new BitmapDrawable(context.getResources(), bitmap);
        return bd;
    }

}
复制代码

 

posted @   炸憨啪  阅读(281)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示