InkCanvas
コントロールからバイト配列を取得しようとしていますが、これまでの方法は少し長めに見えます。InkCanvasのストロークをIRandomnaccessStreamに直接送信する
現在、私は次のようにします。
StorageFolder folder = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync("Temp");
StorageFile file = await folder.CreateFileAsync(GenerateString(5)+".zzx", Windows.Storage.CreationCollisionOption.GenerateUniqueName);
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await SignatureCanvas.InkPresenter.StrokeContainer.SaveAsync(stream);
var array = await IRandomAccessStreamToByteArray(stream);
}
次のようにカスタムストリームリーダーです。
private async Task<byte[]> IRandomAccessStreamToByteArray(IRandomAccessStream stream)
{
var reader = new DataReader(stream.GetInputStreamAt(0));
var bytes = new byte[stream.Size];
await reader.LoadAsync((uint)stream.Size);
reader.ReadBytes(bytes);
return bytes;
}
これは機能し、私に必要なバイト配列を与えてくれますが、不要なイメージを残してしまいます。別のコールがファイルを置き換えたいときに書き込まれているファイルのために、いくつかのアクセスの問題があったので、複数のイメージのルートを下ることに決めました。イメージファイルを完全にスキップする方法はありますか?一時フォルダをクリアするのはあまり問題ではありませんが、避けることができればそれが望ましいでしょう。
私はInkCanvasが直接アレイダンプをサポートしていないことを既に読んでいたので、どんな提案も感謝します!
:私たちがイメージにバイト配列を変換したい場合は
また、我々は次のコードを使用することができるはず'IRandomAccessStream'を保存し、それを使ってバイト配列を取得します。 –
@ JaydenGu-MSFT上記のコードは実際にファイルを生成しますが、ファイル自体は使用されません(代わりに、新しく書き込まれたストリームデータを挟んで変換します)。私が探しているのは、「ファイルを作成する」中間ステップを削除する方法です(それが可能であれば) – Takarii
更新はありますか?私の答えはあなたの問題を解決しましたか? –