ライブラリから写真を選択するか、カメラで写真を撮り、結果をビューに表示したい(ImageView)
しかし、これを含むいくつかの投稿によると、私が使用するMvxHttpImageViewには、画像を表示するためのURIが必要です(ファイルシステムまたはカメラのどちらからのものか)。これは、ストリームをファイルに変換し、URIを取り戻すことを意味します。
私はその仕事をするPictureServiceを書きました:
public class PictureService : IPictureService,
IMvxServiceConsumer<IMvxPictureChooserTask>,
IMvxServiceConsumer<IMvxSimpleFileStoreService>
{
private const int MaxPixelDimension = 1024;
private const int DefaultJpegQuality = 92;
public void TakeNewPhoto(Action<string> onSuccess, Action<string> onError)
{
this.GetService<IMvxPictureChooserTask>().TakePicture(
PictureService.MaxPixelDimension,
PictureService.DefaultJpegQuality,
pictureStream =>
{
var newPictureUri = this.Save(pictureStream);
if (!string.IsNullOrWhiteSpace(newPictureUri))
onSuccess(newPictureUri);
else
onError("No picture selected");
},
() => { /* cancel is ignored */ });
}
public void SelectExistingPicture(Action<string> onSuccess, Action<string> onError)
{
this.GetService<IMvxPictureChooserTask>().ChoosePictureFromLibrary(
PictureService.MaxPixelDimension,
PictureService.DefaultJpegQuality,
pictureStream =>
{
var newPictureUri = this.Save(pictureStream);
if (!string.IsNullOrWhiteSpace(newPictureUri))
onSuccess(newPictureUri);
else
onError("No photo taken");
},
() => { /* cancel is ignored */ });
}
private string Save(Stream stream)
{
string fileName = null;
try
{
fileName = Guid.NewGuid().ToString("N");
var fileService = this.GetService<IMvxSimpleFileStoreService>();
fileService.WriteFile(fileName, stream.CopyTo);
}
catch (Exception)
{
fileName = null;
}
return fileName;
}
}
しかし、プライバシー上の理由から、画像をファイルシステムに保存したくありません。ワークフローは次のとおりです。
- 写真を撮るか選択する
- 画面に表示する(追加情報付き)
- 画像をクラウドに送信するサーバーにモデルを保存します。デバイスでトレースしないでください
私の質問は、ファイルシステムに保存せずに画像データを含むストリームを処理するにはどうすればよいですか?
または
ユーザーがアクセスできない一時ストレージシステムを使用するにはどうすればよいですか(「ルート化された」デバイスの場合は無視してください)。
ご協力いただきありがとうございます。