Xwt.Drawing.Image.LoadImage C# (CSharp) Method

LoadImage() static private method

static private LoadImage ( ImageLoader loader, string fileName, ImageTagSet tagFilter ) : Image
loader ImageLoader
fileName string
tagFilter ImageTagSet
return Image
        static Image LoadImage(ImageLoader loader, string fileName, ImageTagSet tagFilter)
        {
            var toolkit = Toolkit.CurrentEngine;
            if (toolkit == null)
                throw new ToolkitNotInitializedException ();

            var img = loader.LoadImage (fileName);
            var reqSize = toolkit.ImageBackendHandler.GetSize (img);

            var ext = GetExtension (fileName);
            var name = fileName.Substring (0, fileName.Length - ext.Length);
            var altImages = new List<Tuple<string,ImageTagSet,bool,object>> ();
            var tags = Context.RegisteredStyles;

            foreach (var r in loader.GetAlternativeFiles (fileName, name, ext)) {
                int scale;
                ImageTagSet fileTags;
                if (ParseImageHints (name, r, ext, out scale, out fileTags) && (tagFilter == null || tagFilter.Equals (fileTags))) {
                    var rim = loader.LoadImage (r);
                    if (rim != null)
                        altImages.Add (new Tuple<string, ImageTagSet, bool, object> (r, fileTags, scale > 1, rim));
                }
            }

            if (altImages.Count > 0) {
                altImages.Insert (0, new Tuple<string, ImageTagSet, bool, object> (fileName, ImageTagSet.Empty, false, img));
                var list = new List<Tuple<Image,string[]>> ();
                foreach (var imageGroup in altImages.GroupBy (t => t.Item2)) {
                    Image altImg;
                    if (ext == ".9.png")
                        altImg = CreateComposedNinePatch (toolkit, imageGroup);
                    else {
                        var ib = toolkit.ImageBackendHandler.CreateMultiResolutionImage (imageGroup.Select (i => i.Item4));
                        altImg = loader.WrapImage (fileName, imageGroup.Key, ib, reqSize);
                    }
                    list.Add (new Tuple<Image,string[]> (altImg, imageGroup.Key.AsArray));
                }
                if (list.Count == 1)
                    return list [0].Item1;
                else {
                    return new ThemedImage (list, reqSize);
                }
            } else {
                var res = loader.WrapImage (fileName, ImageTagSet.Empty, img, reqSize);
                if (ext == ".9.png")
                    res = new NinePatchImage (res.ToBitmap ());
                return res;
            }
        }