Преобразовать из byte[] в Bitmap
Есть поле типа byte[], нужно его сконвертировать в Bitmap, это необходимо для дальнейшего преобразования в Drawable. В bytes точно содержаться элементы. Я перепробовал следующие варианты:
//bytes - целевой массив
InputStream is = new ByteArrayInputStream(bytes);
Bitmap bmp = BitmapFactory.decodeStream(is);
Drawable dr = new BitmapDrawable(getResources(), bmp)
и
//bytes - целевой массив
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.lenght);
Drawable dr = new BitmapDrawable(getResources(), bmp)
И тот, и другой варианты выдают null, и таким образом я не могу получить Drawable. Если есть другие идеи по превращению byte[] в Drawable - буду рад вашим предложениям) И желательно, конечно, не использовать посторонние библиотеки. Благодарю!
Ответы (1 шт):
Автор решения: Circassian
→ Ссылка
Вот утилиты из моего приложения опубликованного в Google Play. Код 100% рабочий
public static byte[] bitmapToByteArray(Bitmap bitmap) {
ByteArrayOutputStream stream_edit_post_image = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream_edit_post_image);
return stream_edit_post_image.toByteArray();
}
public static Bitmap byteArrayToBitmap(byte[] bytes) {
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
public static Bitmap drawableToBitmap (Drawable drawable) {
if (drawable instanceof BitmapDrawable) return ((BitmapDrawable)drawable).getBitmap();
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
public static Drawable bitmapToDrawable (Context context, Bitmap bitmap) {
Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);
return drawable;
}