/// <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; }
public static IUIImage CreateImage(IntPtr bitmap, ImageCreationOptions options) { if (imageFromBitmap == null) { imageFromBitmap = (IUIImageFromBitmap) new UIRibbonImageFromBitmapFactory(); } return(imageFromBitmap.CreateImage(bitmap, options)); }
public Image(ImageCreationOptions options) : this() { creationOptions = options; }
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); }); } }); }
public static IUIImage CreateImage(IntPtr bitmap, ImageCreationOptions options) { if (imageFromBitmap == null) imageFromBitmap = (IUIImageFromBitmap)new UIRibbonImageFromBitmapFactory(); return imageFromBitmap.CreateImage(bitmap, options); }
public AnimationView(ImageCreationOptions options) : this() { Options = options; }