画像コンテンツの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」を適用するよりも。
あなたの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);
次を使用して、Base64
文字列を画像に変換できます。
Glide.with(context)
.load(Base64.decode(base64ImageString, Base64.DEFAULT))
.asBitmap()
.placeholder(R.drawable.ic_broken)
.into(rowImageView);
.asBitmap()
でエラーが発生する場合は、このように使用します
Glide.with(this)
.asBitmap()
.load(imageAsBytes)
.into(image)
コトリンの方法:
val imageByteArray = Base64.decode(sampleBase64ImageString, Base64.DEFAULT)
Glide.with(this).load(imageByteArray).into(imageView)