web-dev-qa-db-ja.com

Glideを使用してバイト配列を介して画像をロードする方法は?

画像コンテンツのbyte []フォームがあります。しかし、Glideを介してロードすると、壊れた画像が表示されます。私がやっていることを以下に示します。

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

imageByteArrayは、グライドを使用せずにビットマップに正常に変換します。したがって、画像のバイト配列に問題はありません。

不足しているものを教えてください。

また、Glideライブラリcom.github.bumptech.glide:glide:3.6.1を使用していますAndroidサポートライブラリcom.Android.support:support-v13:23.0.1

編集済み

OK、これは私がやっていることです。

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

上記で定義したGlideコードに結果のバイト配列「imageByteArray」を適用するよりも。

24
Adnan Amjad

あなたのbase64文字列が

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."

imageBytes文字列をバイト配列に変換する必要があります

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

その後、このimageByteArrayをGlideに渡します。

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

次を使用して、Base64文字列を画像に変換できます。

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

.asBitmap()でエラーが発生する場合は、このように使用します

             Glide.with(this)
                .asBitmap()
                .load(imageAsBytes)
                .into(image)
5
Zohab Ali

コトリンの方法:

val imageByteArray = Base64.decode(sampleBase64ImageString, Base64.DEFAULT)
Glide.with(this).load(imageByteArray).into(imageView)
0
B. León