-
нужно передать с клиента (пишется Android Studio) на сервер (Win7, D2010) картинку код на клиенте: BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.RGB_565; Bitmap bpS = BitmapFactory.decodeFile(photoDir+"/"+kod+".jpg", options); int byteSize = bpS.getRowBytes() * bpS.getHeight(); ByteBuffer byteBuffer = ByteBuffer.allocate(byteSize); bpS.copyPixelsToBuffer(byteBuffer); byte[] byteArray = byteBuffer.array(); try { //размер данных b = ByteBuffer.allocate(4).putInt(byteArray.length).array(); client.getOutputStream().write(b); client.getOutputStream().write(byteArray); } catch (IOException e) { h.sendEmptyMessage(6); }
код на сервере e:=AContext.Connection.Socket.ReadLongInt(); AContext.Connection.Socket.ReadBytes(buff,e,false); st:=TMemoryStream.Create; st.Write(buff[0],e); bmp:=TBitmap.Create; bmp.LoadFromStream(st);
данные передаются, но в Bitmap не грузятся. Видимо, данные не соответствуют ожидаемому формату. Кто в теме пните в нужном направлении. Либо как их раскодировать на сервере, либо как подготовить в нужном виде на клиенте.
-
> Видимо, данные не соответствуют ожидаемому формату
Видимо данные настолько секретные, что их нельзя посмотреть в отладчике/вывести в лог ?
-
LoadFromStream ожидает битмап со всеми заголовками (bmp-файл, фактически), а посылаются одни данные.
-
> Игорь Шевченко © (27.05.17 14:13) [1] > > > Видимо, данные не соответствуют ожидаемому формату > > > Видимо данные настолько секретные, что их нельзя посмотреть > в отладчике/вывести в лог ? > >
данные не секретные, но мне они ни о чём не говорят. сказывается недостаток знания по теме
> invis © (27.05.17 14:42) [2] > LoadFromStream ожидает битмап со всеми заголовками (bmp- > файл, фактически), а посылаются одни данные.
а как правильно послать данные? платформа то другая. Записать в стрим и отправить его нельзя, ну или по крайней мере я пока не умею
-
> Savek (27.05.17 16:13) [3]
в сети полно примеров получения как bmp, так и png данных.
> client.getOutputStream().write(b);
> e:=AContext.Connection.Socket.ReadLongInt();
тут есть тонкость, Indy по умолчанию, переворачивает порядок байт. Чтобы этого не было, нужно в скобках указать false.
-
к ReadLongInt как раз претензий нет, длина передаётся правильно, проверял что касается примеров в сети, кинул бы пару ссылок, я б тебе спасибо сказал бы) Пока последую совету [1]. попробую сравнить полученный массив байт из сокета и сформированный на сервере из одного и того же файла, вдруг что-то прояснится
|