• Savek (27.05.17 14:07) [0]
    нужно передать с клиента (пишется 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 не грузятся. Видимо, данные не соответствуют ожидаемому формату. Кто в теме пните в нужном направлении. Либо как их раскодировать на сервере, либо как подготовить в нужном виде на клиенте.
  • Игорь Шевченко © (27.05.17 14:13) [1]

    > Видимо, данные не соответствуют ожидаемому формату


    Видимо данные настолько секретные, что их нельзя посмотреть в отладчике/вывести в лог ?
  • invis © (27.05.17 14:42) [2]
    LoadFromStream ожидает битмап со всеми заголовками (bmp-файл, фактически), а посылаются одни данные.
  • Savek (27.05.17 16:13) [3]

    > Игорь Шевченко ©   (27.05.17 14:13) [1]
    >
    > > Видимо, данные не соответствуют ожидаемому формату
    >
    >
    > Видимо данные настолько секретные, что их нельзя посмотреть
    > в отладчике/вывести в лог ?
    >
    >


    данные не секретные, но мне они ни о чём не говорят. сказывается недостаток знания по теме

    > invis ©   (27.05.17 14:42) [2]
    > LoadFromStream ожидает битмап со всеми заголовками (bmp-
    > файл, фактически), а посылаются одни данные.


    а как правильно послать данные?
    платформа то другая. Записать в стрим и отправить его нельзя, ну или по крайней мере я пока не умею
  • Eraser © (27.05.17 16:47) [4]

    > Savek   (27.05.17 16:13) [3]

    в сети полно примеров получения как bmp, так и png данных.

    > client.getOutputStream().write(b);


    > e:=AContext.Connection.Socket.ReadLongInt();

    тут есть тонкость, Indy по умолчанию, переворачивает порядок байт. Чтобы этого не было, нужно в скобках указать false.
  • Savek (29.05.17 10:31) [5]
    к ReadLongInt как раз претензий нет, длина передаётся правильно, проверял
    что касается примеров в сети, кинул бы пару ссылок, я б тебе спасибо сказал бы)
    Пока последую совету [1]. попробую сравнить полученный массив байт из сокета и сформированный на сервере из одного и того же файла, вдруг что-то прояснится
Есть новые Нет новых   [118450   +38][b:0][p:0]