【问题标题】:Passing images from one page to another in Xamarin Forms在 Xamarin Forms 中将图像从一页传递到另一页
【发布时间】:2020-09-16 19:24:56
【问题描述】:

在我的应用程序中,我需要将图像从一个页面传递到另一个页面图像视图来显示。我正在用相机拍照并做一些事情,然后我想将这些图像发送到第二页。

            if (await isCamAvailable())
            {

                 MediaFile photo1 = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions() { Directory = "NewBusiness", Name = "image1.jpg", PhotoSize = PhotoSize.MaxWidthHeight, MaxWidthHeight = 1024, CompressionQuality = 95 });

                if (photo1 != null)
                {
                    PhotoImage1.Source = ImageSource.FromStream(() => { return photo1.GetStream(); });
                    countList.Remove("a");
                    countList.Add("a");
                }

            }

然后我通过这样做将它添加到字符串数组中

        private List<string> sendImgList = new List<string>();

        sendImgList.Add(createImgByteString(photo1.GetStream()));


        private string createImgByteString(Stream data)
        {
            var bytes = new byte[data.Length];
            return Convert.ToBase64String(bytes);
        }

然后从第二页开始(为了测试,我只添加了一张图片)

        foreach (string ss in imgList) {

            byte[] Base64Stream = Convert.FromBase64String(ss);
            imgView.Source = ImageSource.FromStream(() => new MemoryStream(Base64Stream));

        }

我遵循了这个例子。但图片没有显示。

https://forums.xamarin.com/discussion/139360/how-to-transfer-images-from-one-page-to-another

也在 logcat 中得到这个..

[0:] ImageLoaderSourceHandler: Image data was invalid: Xamarin.Forms.StreamImageSource05-29 14:22:43.758 W/monodroid-assembly( 8737): typemap: unable to find mapping to a Java type from managed type 'System.Byte, mscorlib'

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    您似乎使用了 Media.Plugin 。为什么不直接传递 ImageSource 呢? 如果您确实想将其转换为字节数组,请检查以下代码

    public byte[] GetImageStreamAsBytes(Stream input)
    {
      var buffer = new byte[16*1024];
      using (MemoryStream ms = new MemoryStream())
      {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
                    ms.Write(buffer, 0, read);
        }
          return ms.ToArray();
       }
    }
    
    var imgDate = GetImageStreamAsBytes(photo1.GetStream());
    

    直接传递字节数组会更好。

    【讨论】:

    • 但是你将如何从第二页获得?我也在第二页上使用 GetImageStreamAsBytes 吗?
    【解决方案2】:

    在页面中传递参数的最佳模式是使用 Prism。

    https://prismlibrary.com/docs/xamarin-forms/navigation/passing-parameters.html

    >

    _navigationService.NavigateAsync(new Uri("MainPage", new NavigationParameters
    {
        { "key_parameter", image }
    })));
    

    在其他页面上:

    >

    public override void OnNavigatedTo(INavigationParameters parameters)
    {
        image = (Image)parameters["key_parameter"];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2018-04-24
      相关资源
      最近更新 更多