Ricoh Theta live previewを必要とするアプリケーションに取り組んでいます。Ricoh Theta のドキュメントは何も言いません。javascriptで実行するリクエストを見つけましたが、これまでのところc#には何もありません。
まず、camera._getLivePreviewを使用して http リクエストを送信しました。これは機能しています (少なくともエラーはありません)。
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 を使用してストリームを表示する方が簡単です。