Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="iFactr.UI.Controls.Image"/> class.
        /// </summary>
        /// <param name="filePath">The full path of the file for the image.</param>
        /// <param name="options">Additional options to apply to the image during creation.</param>
        public Image(string filePath, ImageCreationOptions options)
        {
            Pair = MXContainer.Resolve <IImage>(null, options);

            NativeControl.HorizontalAlignment = HorizontalAlignment.Left;
            NativeControl.VerticalAlignment   = VerticalAlignment.Top;
            NativeControl.FilePath            = filePath;
        }
Ejemplo n.º 2
0
 public static IUIImage CreateImage(IntPtr bitmap, ImageCreationOptions options)
 {
     if (imageFromBitmap == null)
     {
         imageFromBitmap = (IUIImageFromBitmap) new UIRibbonImageFromBitmapFactory();
     }
     return(imageFromBitmap.CreateImage(bitmap, options));
 }
Ejemplo n.º 3
0
 public Image(ImageCreationOptions options)
     : this()
 {
     creationOptions = options;
 }
Ejemplo n.º 4
0
        public static void SetDrawable(string url, Action <Drawable, string> callback, ImageCreationOptions options = ImageCreationOptions.None, TimeSpan cacheDuration = default(TimeSpan))
        {
            if (callback == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(url))
            {
                callback.Invoke(null, url);
                return;
            }

            #region Check memory cache

            var skipCache = (options & ImageCreationOptions.IgnoreCache) == ImageCreationOptions.IgnoreCache;
            var cached    = skipCache ? null : Device.ImageCache.Get(url);
            if (cached is ImageData droidImage)
            {
                callback.Invoke(new BitmapDrawable(Resources, droidImage.Bitmap), url);
                return;
            }

            #endregion

            if (cacheDuration == default(TimeSpan))
            {
                cacheDuration = Timeout.InfiniteTimeSpan;
            }

            //Check to see if another view is already waiting for this url so we don't download it again
            var currentDownload = PendingDownloads.GetValueOrDefault(url);
            if (currentDownload != null)
            {
                currentDownload.Add(callback);
                return;
            }
            else
            {
                PendingDownloads[url] = new List <Action <Drawable, string> > {
                    callback
                };
            }

            Device.Thread.Start(() =>
            {
                var storage   = (AndroidFile)Device.File;
                var cacheFile = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),
                                                       url.GetHashCode().ToString(CultureInfo.InvariantCulture).Replace("-", "N") + ".urlimage");

                Bitmap bitmap = null;
                Stream assetStream;
                Drawable drawable = null;
                var resourceId    = 0;

                if (url.StartsWith("data:"))
                {
                    // Load data URIs like files
                    if (!storage.Exists(cacheFile))
                    {
                        storage.Save(cacheFile, ImageUtility.DecodeImageFromDataUri(url, out string ext));
                    }
                }
                else if ((resourceId = storage.ResourceFromFileName(url)) > 0)
                {
                    drawable = Resources.GetDrawable(resourceId);
                }
                else if ((assetStream = storage.GetAsset(url)) != null)
                {
                    bitmap = BitmapFactory.DecodeStream(assetStream);
                }
                else if (cached != null)
                {
                    var bytes = cached.GetBytes();
                    if (bytes != null && bytes.Length > 0)
                    {
                        bitmap = BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length, new BitmapFactory.Options
                        {
                            InDensity       = (int)DisplayMetricsDensity.Default,
                            InTargetDensity = (int)((int)DisplayMetricsDensity.Default * DroidFactory.DisplayScale),
                        });
                    }
                }
                else if (!storage.Exists(url) && (!storage.Exists(cacheFile) || new FileInfo(cacheFile).LastWriteTimeUtc > DateTime.UtcNow - cacheDuration))
                {
                    try
                    {
                        var uri   = Java.Net.URI.Create(url);
                        var bytes = string.IsNullOrEmpty(uri.Scheme) ? null : Device.Network.GetBytes(url);
                        if (bytes != null && bytes.Length > 0)
                        {
                            storage.Save(cacheFile, bytes);
                        }
                    }
                    catch (Exception ex)
                    {
                        Device.Log.Error("Image download failed", ex);
                    }
                }
                else
                {
                    bitmap = LoadFromStorage(url, 0, 0);
                }

                if (storage.Exists(cacheFile))
                {
                    bitmap = LoadFromStorage(cacheFile, 0, 0);
                }

                if (!skipCache && bitmap != null)
                {
                    Device.ImageCache.Add(url, new ImageData(bitmap, url));
                }

                var downloads = PendingDownloads[url];
                PendingDownloads.Remove(url);
                if (drawable == null && bitmap != null)
                {
                    drawable = new BitmapDrawable(Resources, bitmap);
                }
                foreach (var iv in downloads)
                {
                    Device.Thread.ExecuteOnMainThread(() =>
                    {
                        iv.Invoke(drawable, url);
                    });
                }
            });
        }
Ejemplo n.º 5
0
 public static IUIImage CreateImage(IntPtr bitmap, ImageCreationOptions options)
 {
     if (imageFromBitmap == null)
         imageFromBitmap = (IUIImageFromBitmap)new UIRibbonImageFromBitmapFactory();
     return imageFromBitmap.CreateImage(bitmap, options);
 }
Ejemplo n.º 6
0
 public AnimationView(ImageCreationOptions options)
     : this()
 {
     Options = options;
 }