【问题标题】:Xamarin iOS where are images from galleryXamarin iOS 在哪里来自画廊的图像
【发布时间】:2016-09-14 00:03:29
【问题描述】:

我正在寻找一种方法来循环播放 iOS 设备上保存的每个图像。

我已经试过了

var library = new ALAssetsLibrary();

library.Enumerate(ALAssetsGroupType.Library, GroupEnumerator, Console.WriteLine);
library.Enumerate(ALAssetsGroupType.Album, GroupEnumerator, Console.WriteLine);
library.Enumerate(ALAssetsGroupType.SavedPhotos, GroupEnumerator, Console.WriteLine);
library.Enumerate(ALAssetsGroupType.All, GroupEnumerator, Console.WriteLine);

但是当我调试时所有列表都是空的。

如何检索保存在设备(图库)中的所有图像的列表?

这是我(尝试)列出所有图像的完整类代码

using AssetsLibrary;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace AG.iOS.Services
{
    public class iOSGalleryContent : IGalleryContent
    {
        public static readonly List<string> ImageExtensions = new List<string> { ".JPG", ".JPE", ".BMP", ".GIF", ".PNG" };
        List<string> ImagesNames = new List<string>();
        public List<string> GetImagesNames()
        {
            var library = new ALAssetsLibrary();
            library.Enumerate(ALAssetsGroupType.Library, GroupEnumerator, Console.WriteLine);
            library.Enumerate(ALAssetsGroupType.Album, GroupEnumerator, Console.WriteLine);
            library.Enumerate(ALAssetsGroupType.SavedPhotos, GroupEnumerator, Console.WriteLine);
            library.Enumerate(ALAssetsGroupType.All, GroupEnumerator, Console.WriteLine);

            return ImagesNames;



        }

        private void GroupEnumerator(ALAssetsGroup group, ref bool shouldStop)
        {
            if (group == null)
            {
                shouldStop = true;
                return;
            }
            if (!shouldStop)
            {
                group.Enumerate(AssetEnumerator);
                shouldStop = false;
            }
        }

        private void AssetEnumerator(ALAsset asset, nint index, ref bool shouldStop)
        {
            if (asset == null)
            {
                shouldStop = true;
                return;
            }
            if (!shouldStop)
            {
                ImagesNames.Add(asset.AssetUrl.AbsoluteString);
                Console.WriteLine(String.Format("Item[{0}] : {1}", index, asset.ToString()));
                shouldStop = false;
            }
        }
    }
}

【问题讨论】:

    标签: c# xamarin xamarin.ios


    【解决方案1】:

    这是一个从所有相册中获取图像的最小代码示例。为您的目的修改它应该相对容易。代码没试过,应该没问题。

    assetsLibrary = new ALAssetsLibrary();
    photoAssets = new List<ALAsset>();
    
    assetsLibrary.Enumerate (ALAssetsGroupType.Album, (ALAssetsGroup group, ref bool stop) => {
        group.SetAssetsFilter (ALAssetsFilter.AllPhotos);
        group.Enumerate ((ALAsset asset, nint index, ref bool st) => {
            int notfound = Int32.MaxValue;
            if (asset != null && index != notfound) {
                photoAssets.Add (asset);
            }
        });
    });
    

    Xamarin 有一个执行此操作的 Xamarin.iOS 示例:MediaNotes

    【讨论】:

    • 感谢您,这与我在课堂上所做的工作几乎相同(请参阅编辑以获取完整的课程)ALAssetsFilter.AllPhotos 没有返回任何照片。
    【解决方案2】:

    奇怪的是,代码运行良好...调试器将我指向错误的方向,因为他不能碰巧向我显示 stringUrl 列表的内容。

    所以,请随意使用它。它做了它应该做的事情。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      相关资源
      最近更新 更多