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 @ 2022-11-21 19:52  炸憨啪  阅读(297)  评论(0)    收藏  举报