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);
}
}