如何共享已消耗的内存流
本文关键字:内存 何共享 共享 | 更新日期: 2023-09-27 18:36:01
我需要在 Xamarin.Forms 应用的不同页面之间共享图像。
在页面上加载图像后,我无法重复使用图像源和流。因此,我也需要在其他页面上加载相同的图像。
我在这里发布了一个相关问题。
下面是一些代码:
public PhotoCapturedViewModel(IScreen screen, Stream stream) : base(screen, "")
{
Photo = ImageSource.FromStream(() => stream); // This stream was already used on another page
Apply = new DelegateCommand(_ => Publish(APPLY_PHOTO, new RenderedPhoto(stream, Description)));
}
我通过立即将最近创建的流转换为字节数组来解决我的问题。
然后,我通过传递字节数组来生成新的内存流。
创造:
var file = await service.TakePhotoAsync(mediaOptions);
var stream = file.GetStream();
using (var memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
var image = memoryStream.ToArray();
Publish(PHOTO_CAPTURED, new ImageCaptureNavigationArgs(image));
}
导航:
static void OnPhotoCaptured(object obj)
{
var args = obj as ImageCaptureNavigationArgs;
var screen = IOCServiceRegistration<IUnityContainer>.Container.Resolve(typeof(IScreen)) as IScreen; // ReactiveUI dependency kludge. Sigh...
screen.Router.Navigate.Execute(new PhotoCapturedViewModel(screen, args.Stream));
}
用法:
public partial class PhotoCapturedViewModel : BaseViewModel
{
public PhotoCapturedViewModel(IScreen screen, byte[] image) : base(screen, "")
{
var memoryStream = new MemoryStream(image);
Photo = ImageSource.FromStream(() => memoryStream);
Apply = new DelegateCommand(_ => Publish(APPLY_PHOTO, new RenderedPhoto(image, Description)));
}
我解决这个问题的方法不是使用相同的流,而是简单地将新图像源设置为原始图像的源。
尝试这样的事情:
public PhotoCapturedViewModel(IScreen screen, Image originalImage) : base(screen, "")
{
Photo = new Image() {Source = originalImage.Source};
}