Как запустить предварительный просмотр Ricoh Theta в c #? - PullRequest
1 голос
/ 24 апреля 2019

Я работаю над приложением, запрашивающим предварительный просмотр Ricoh Theta .Док Ricoh Theta ничего не говорит.Я нашел запрос на его запуск в javascript , но пока ничего нет для c # .

Сначала я отправил http-запрос с camera._getLivePreview , который работает (по крайней мере, у меня нет ошибки):

var url = requests("commands/execute");
        request = WebRequest.Create(url);
        request.ContentType = "application/json";
        request.Method = "POST";

        using (var streamWriter = new StreamWriter(request.GetRequestStream()))
        {
            string json = "{\"name\":\"camera._getLivePreview\"," +
                          "\"parameters\":{\"sessionId\":\"" + sid + "\"}}";

            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();
        }

Затем яя пытался использовать решение, которое я нашел здесь , чтобы напечатать изображение, указанное в байтах в ответе:

        var response = request.GetResponse().GetResponseStream();

        BinaryReader reader = new BinaryReader(new BufferedStream(response), new System.Text.ASCIIEncoding());

        List<byte> imageBytes = new List<byte>();
        bool isLoadStart = false; 
        byte oldByte = 0; 
        while (true)
        {
            byte byteData = reader.ReadByte();

            if (!isLoadStart)
            {
                if (oldByte == 0xFF)
                {
                    // First binary image
                    imageBytes.Add(0xFF);
                }
                if (byteData == 0xD8)
                {
                    // Second binary image
                    imageBytes.Add(0xD8);

                    // I took the head of the image up to the end binary
                    isLoadStart = true;
                }
            }
            else
            {
                // Put the image binaries into an array
                imageBytes.Add(byteData);

                // if the byte was the end byte
                // 0xFF -> 0xD9 case、end byte
                if (oldByte == 0xFF && byteData == 0xD9)
                {
                    // As this is the end byte
                    // we'll generate the image from the data and can create the texture
                    // imageBytes are used to reflect the texture
                    // imageBytes are left empty
                    // the loop returns the binary image head
                    isLoadStart = false;
                }
            }
          oldByte = byteData;
          byteArrayToImage(imageBytes.ToArray());
        }

    }

Так как оно ничего не печатало, я попыталсяСоздайте метод отправки imageurl в src изображения (используя найденный код здесь ):

public void byteArrayToImage(byte[] byteArrayIn)
        {
            string imreBase64Data = Convert.ToBase64String(byteArrayIn);
            string imgDataURL = string.Format("data:image/png;base64,{0}", imreBase64Data);
            imgPreview.Source = imgDataURL;
        }

XAML изображения:

<Image Source="" 
               x:Name="imgPreview"/>

Как заставить это работать?

Редактировать 1: По сути, я думаю, что реальный вопрос здесь заключается в том, «как напечатать изображение из байтового массива?»

Редактировать 2: Я нашелмакет обновляется только после завершения первого вызванного метода, и было бы легче отобразить поток с помощью URL, хотя пакеты

...