簡體   English   中英

Xamarin iOS 哪里是圖庫中的圖像

[英]Xamarin iOS where are images from gallery

我正在尋找一種方法來循環 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;
            }
        }
    }
}

這是一個從所有相冊中獲取圖像的最小代碼示例。 為您的目的修改它應該相對容易。 我沒有試過代碼,但應該沒問題。

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

奇怪的是,代碼運行良好......調試器指向錯誤的方向,因為他無法向我展示 stringUrl 列表的內容。

所以,請隨意使用它。 它做它應該做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM