Я работаю над приложением, запрашивающим предварительный просмотр 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, хотя пакеты