如何使用Glide通过字节数组加载图像?

2022-09-01 04:09:04

我有一个图像内容byte[]形式。但是当我通过Glide加载它们时,将显示损坏的图像。我正在做的事情如下所示。

Glide.with(context)
    .load(imageByteArray)
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);

imageByteArray 在不使用 glide 的情况下成功转换为位图。因此,图像字节数组没有错误。

请指导我错过了什么?

另外,我正在使用Glide library com.github.bumptech.glide:glide:3.6.1 和Android支持库com.android.support:support-v13:23.0.1

编辑

好吧,这就是我正在做的。

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."

上面定义的这个字符串是我从Web API接收的实际图像的字节。

我正在将此字符串转换为字节数组,如下所示

public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
        return data;
}

比我正在应用结果字节数组“imageByteArray”到上面定义的Glide代码。


答案 1

假设您的 base64 字符串是

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."

您应该通过以下方式将字符串转换为字节数组imageBytes

byte[] imageByteArray = Base64.decode(imageBytes, Base64.DEFAULT);

之后将此传递给Glide。imageByteArray

Glide.with(context)
    .load(imageByteArray)
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);

答案 2

您可以使用以下命令将字符串转换为图像Base64

Glide.with(context)
    .load(Base64.decode(base64ImageString, Base64.DEFAULT))
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);

推荐