【问题标题】:Bitmap image loading in xamarin forms以 xamarin 形式加载位图图像
【发布时间】:2023-03-24 06:07:01
【问题描述】:

我在 xamarin 表单列表视图中加载图像时遇到内存问题,现在我需要在表单中实现位图图像,但我无法在 xamarin 表单中执行此操作我找不到任何命名空间,包括 xamarin 表单中的位图 我有一个普通的数据绑定代码,它也绑定图像

 public async void GetResult()
    //public  void GetResult()
    {
        try
        {
            IsBusy = true;
            var client = new HttpClient();
            var json = await client.GetStringAsync(string.Format(Url));
            var items = JsonConvert.DeserializeObject<ObservableCollection<cm_main_category>>(json.ToString());
            foreach (var item in items)
            {
                 item.image_url = "http://somelink.net" + item.image_url.Substring(1, item.image_url.Length - 1);
               // item.image_url = "http://127.0.0.1" + item.image_url.Substring(1, item.image_url.Length - 1);
                ListItems.Add(item);
            }
            IsBusy = false;
        }

现在我需要为此代码实现位图应该是什么方法?

【问题讨论】:

    标签: xamarin xamarin-forms


    【解决方案1】:

    如果您想节省内存,您可以尝试使用 FFImageLoading CachedImage,它是与 Image API 兼容的替代品,具有高级内存缓存和下采样功能。只需将 Image 替换为 CachedImage 并设置其下采样属性之一。

    https://github.com/molinch/FFImageLoading

    【讨论】:

      【解决方案2】:

      显然您想通过 URI 绑定图像。这在 Xamarin.Forms 中非常简单。

      您只需要将ImageCellImageSourceProperty 绑定到知道URI 的属性。 可以在此处找到 XAML 绑定和 C# 绑定的一个很好的示例:https://www.syntaxismyui.com/xamarin-forms-listview-imagecell-recipe/

      编辑: 从 cmets 复制:解决方案是将图像源设置为 null 并触发垃圾收集,如下所述:OutOfMemoryError when loading an image

      【讨论】:

      • 我可以做到这一点,我也可以用图像填充列表视图,但问题是由于内存错误我无法向其中添加更多数据,我需要图像位图我该如何实现位图图像而不是普通图像
      • 您面临的内存错误是什么?您收到OutOfMemoryException 吗?然后阅读此developer.xamarin.com/recipes/android/resources/general/…
      • 是的,我得到了 OutOfMemoryException 我如何在链接是关于本机的表单上实现它我需要表单感谢您的重播
      • 我只知道关于 android 上图像的内存问题。其他用户已经面临这个问题。我认为他们的解决方案可以帮助您 1.stackoverflow.com/questions/25807196/… 2.stackoverflow.com/questions/31079620/…
      • 还尝试将 Java 堆大小设置为例如。 Android 项目选项中的 1GB。我认为它会解决你的记忆问题。
      【解决方案3】:
       protected override void OnDisappearing()
          {
              BindingContext = null;
              Content = null;
              base.OnDisappearing();
              GC.Collect();
          }
      

      在某些应用程序上,如果您的应用程序正在处理数千个数据并更好地添加位图,这将有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 2018-08-21
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        相关资源
        最近更新 更多