我有一个base64二进制字符串,该字符串是从mongoDB中的图像获取的。例如:
[255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,96,0,96,0,0,255,219,0,67,0,8,6,6, 7,6,5,8,7,7,7,9,9,8,10,12,20,13,12,11,11,12,25,18,19,15,20,29,26, 31,30,29,26,28,28,32,36,46,39,32,34,44,35,28,28,40,55,41,44,48,49,52,52,52, 31,39,57,61,56,50,60,46,51,52,50,255,219,0,67,1,9,9,9,12,11,12,24,13,13,24,50, 33,28,33,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, ................................,253,246,255,0,190,141,20,80,2,249,142,57,222,223,153,160,200,231,146,237,159,173,20,80,1,230,63,247,219,254,250,52,155,223,251,237,255,0,125,26,40,160,4,103,102,108,177 79,82,78,73,162,138,40,3,255,217]
在Android中,如何将该字符串转换为位图?该代码不起作用:
byte[] decodedString = {Base64 Binary Here}.getBytes();
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
这是我的完整代码:
// JSON Parser
JsonParser jsonParser = new JsonParser();
JsonArray jsonArray = (JsonArray) jsonParser.parse(json_result);
String thirdParse = null;
for (int i = 0; i < jsonArray.size(); i++) {
JsonObject object = (JsonObject) jsonArray.get(i);
JsonObject firstParse = (JsonObject) object.get("img");
JsonObject secondParse = (JsonObject) firstParse.get("data");
thirdParse = secondParse.get("data").toString();
}
byte[] decodedString = thirdParse.getBytes();
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
imageView.setImageBitmap(bmp);
这是我从mongoDB获得的JSON:
[{"img":{"data":{"type":"Buffer","data":[(base64 binary data)]}}}]
答案 0 :(得分:0)
尝试一下:
byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
image.setImageBitmap(decodedByte);
答案 1 :(得分:0)
好的,经过一番潜入,它没用的原因是因为在这里
byte[] decodedString = thirdParse.getBytes();
您不是从字符串中获取字节数组,而是实际上将thirdParse转换为字节数组,因此,例如,当您使用 getBytes()时,获得thirdparse = [1,2,3]它将把这个数组转换为字节,而你想要的是直接取值本身而不进行任何转换,所以这就是我所做的
首先,我创建了一个方法,可以将ThirdParse赋予
public byte[] convertToByteArray(String stringContainingByteArray){
String[] l = stringContainingByteArray.replace("[","").replace("]","").split(",");
byte [] byteArray = new byte[l.length];
for (int i=0;i<l.length;i++){
byteArray[i]=Byte.parseByte(l[i]);
}
return byteArray;
}
,您将只向它发送thirdParse字符串,并检索一个byteArray,将其按以下方式传递给BitmapFactory
byte[] byteArray = convertToByteArray(stringContainingByteArray)
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
imageView.setImageBitmap(bmp)
为简单起见,没有方法的整个代码如下
// JSON Parser
JsonParser jsonParser = new JsonParser();
JsonArray jsonArray = (JsonArray) jsonParser.parse(json_result);
String thirdParse = null;
for (int i = 0; i < jsonArray.size(); i++) {
JsonObject object = (JsonObject) jsonArray.get(i);
JsonObject firstParse = (JsonObject) object.get("img");
JsonObject secondParse = (JsonObject) firstParse.get("data");
thirdParse = secondParse.get("data").toString();
}
String[] l = thirdParse.replace("[","").replace("]","").split(",");
byte [] decodedString = new byte[l.length];
for (int i=0;i<l.length;i++){
decodedString[i]=Byte.parseByte(l[i]);
}
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
imageView.setImageBitmap(bmp);
答案 2 :(得分:0)
我刚刚在mongoDB连接中将图像保存类型从Buffer更改为String,然后将编码更改为base64 String。
答案 3 :(得分:0)
def xxx: Any = macro Macro.exec
def exec(c: blackbox.Context): c.Tree = {
import c.universe._
c.typecheck(
c.parse(
"org.scalatest.junit.MyRunListener"
),
silent = true
)
}