Как преобразовать system.byte[] в растровое изображение?
I'm doing a job for the school but I'm having problems with the images. I get System.Byte [] from my web service and I've tried several solutions and I can't convert to bitmap and add my ImageView. In my database the column "Image" appears <Binary data>. Can someone help me? thanks Here is my android code. 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 } } The web service sends: <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> My method is this: [WebMethod] public List<string> List_Images() { List<string> lista = new List<string>(); SqlConnection conexao = new SqlConnection(); SqlCommand cmd = new SqlCommand("Select Imagem From Transmontanos", conexao); conexao.ConnectionString = "server = X; database = Transmontanos; user = admin; password = admin;"; conexao.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { result = dr["Imagem"].ToString(); lista.Add(result); } dr.Close(); conexao.Close(); return lista; }
Что я уже пробовал:
общественная статический недействительным setImageViewWithByteArray(просмотреть графическое представление, Byte[] данные) {
Растровое изображение растровое изображение = BitmapFactory.decodeByteArray(данные, 0, данные.длина);
view.setImageBitmap(растровое изображение);
}
Полученный аргумент данных byte [] :
https://drive.google.com/file/d/1fsYCDQmlvFODskRDa_Sw2FR-giEu3MVY/view?usp=sharing
Но растровое изображение равно нулю
phil.o
13 байт-это очень мало для данных растрового изображения. Соответствует ли он количеству байтов соответствующей записи в базе данных?
Laura Saraiva
Да, это исходит из моей базы данных. Тип моего столбца "изображение" - <binary data=""> и возвращает систему.Byte [] и если я конвертирую его в байты, то он выглядит как ссылка
phil.o
Я спрашивал, действительно ли соответствующий столбец имеет 13-байтовые данные. Совпадает ли количество байтов в базе данных с количеством байтов полученных клиентом данных (13)?
Laura Saraiva
Не. Моя колонка в базе данных заполняется примерно так:
0x89504E470D0A1A0A0000000D494844520000050000000400080200000031F16314000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000B1200000B1201D2DD7EFC0000FFA549444154785EEC9D059C...
phil.o
Намного больше, чем 13 байт, так что. Байт 2-персонажи в этом виде шестнадцатеричной строки.
То, что вы получаете на клиенте, отличается от того, что находится в БД. Проблема, по-видимому, находится на сервере.
Laura Saraiva
Может быть, это потому, что строка слишком длинная, чтобы вернуть систему. []
phil.o
Пожалуйста, не ставьте большие блоки кода в комментариях. Лучше используйте виджет "улучшить вопрос" и добавьте эту информацию в свой вопрос.
Laura Saraiva
Извините, я не знал, я новичок на этом форуме
Laura Saraiva
После преобразования моего изображения в base64 в веб-сервисе клиент уже получает другое. Однако мое растровое изображение по-прежнему равно нулю. Но вы также можете найти решение. Вы можете посмотреть по ссылке выше, я обновил ее, чтобы вы могли видеть, как получает клиент.
Richard MacCutchan
Понятия не имею, что это такое, но это не растровое изображение.
David Crow
Для преобразования из byte[]
к Bitmap
- а вы пробовали:
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);