如何将 System.Byte[] 转换为位图?
How to convert System.Byte[] to bitmap?
我正在为学校做一份工作,但我对图像有疑问。
我从我的 Web 服务中得到 System.Byte [],我尝试了几种解决方案,但我无法转换为位图并添加我的 ImageView。在我的数据库中,列 "Image" 出现了。
有人能帮我吗?谢谢
这是我的 android 代码。
private String NAMESPACE = "http://tempuri.org/";
private String URL = "http://X.X.X.X/ProjetoFinal/WSGestao.asmx?WSDL";
private String METHOD_NAME = "List_Images";
private String SOAP_ACTION = "http://tempuri.org/List_Images";
private String[] List;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
new MyAsyncTask().execute();
}
private class MyAsyncTask extends AsyncTask<Void,Void,String[]> {
protected String[] doInBackground(Void... strings) {
//connection to the web service
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();
//Fetch the server's response and add the list
List = new String[response.getPropertyCount()];
for (int i = 0; i < response.getPropertyCount(); i++) {
List[i] = response.getProperty(i).toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return List;
}
@Override
protected void onPostExecute(String[] result) {
super.onPostExecute(result);
//convert to Bitmap
}
}
网络服务发送:
<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
</ArrayOfString>
public static void setImageViewWithByteArray(ImageView view, Byte[] data) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
view.setImageBitmap(bitmap);
}
使用此代码在 imageView 上显示字节 []
您的网络服务向您发送字符串。你试图将 System.Byte[]
字符串转换为图像。但它是字符串,而不是图像。这就是为什么它不起作用。
result[0].getBytes()
向您显示:
这里data
数组中有13个元素("System.Byte[]"
字符串的长度也是13)。这里的每个字节只是 "System.Byte[]"
字符串中符号的 utf8
代码。
83是大S
符号,121是y
,115是s
等等
因此您需要提供真实图像的正确字节数组并使用 Destroyer
答案中的 setImageViewWithByteArray
方法。
我正在为学校做一份工作,但我对图像有疑问。 我从我的 Web 服务中得到 System.Byte [],我尝试了几种解决方案,但我无法转换为位图并添加我的 ImageView。在我的数据库中,列 "Image" 出现了。 有人能帮我吗?谢谢
这是我的 android 代码。
private String NAMESPACE = "http://tempuri.org/";
private String URL = "http://X.X.X.X/ProjetoFinal/WSGestao.asmx?WSDL";
private String METHOD_NAME = "List_Images";
private String SOAP_ACTION = "http://tempuri.org/List_Images";
private String[] List;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
new MyAsyncTask().execute();
}
private class MyAsyncTask extends AsyncTask<Void,Void,String[]> {
protected String[] doInBackground(Void... strings) {
//connection to the web service
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();
//Fetch the server's response and add the list
List = new String[response.getPropertyCount()];
for (int i = 0; i < response.getPropertyCount(); i++) {
List[i] = response.getProperty(i).toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return List;
}
@Override
protected void onPostExecute(String[] result) {
super.onPostExecute(result);
//convert to Bitmap
}
}
网络服务发送:
<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
</ArrayOfString>
public static void setImageViewWithByteArray(ImageView view, Byte[] data) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
view.setImageBitmap(bitmap);
}
使用此代码在 imageView 上显示字节 []
您的网络服务向您发送字符串。你试图将 System.Byte[]
字符串转换为图像。但它是字符串,而不是图像。这就是为什么它不起作用。
result[0].getBytes()
向您显示:
这里data
数组中有13个元素("System.Byte[]"
字符串的长度也是13)。这里的每个字节只是 "System.Byte[]"
字符串中符号的 utf8
代码。
83是大S
符号,121是y
,115是s
等等
因此您需要提供真实图像的正确字节数组并使用 Destroyer
答案中的 setImageViewWithByteArray
方法。