internal void AddFrame (BitmapImage bitmap, double scaleFactor)
{
ImageFrame frame = new ImageFrame {
Bitmap = bitmap,
ScaleFactor = scaleFactor
};
frames.Add (frame);
frame.HorizontalSections = CreateSections (frame, Enumerable.Range (1, (int)bitmap.Width - 2).Select (n => bitmap.GetPixel (n, 0)));
frame.VerticalSections = CreateSections (frame, Enumerable.Range (1, (int)bitmap.Height - 2).Select (n => bitmap.GetPixel (0, n)));
double padLeft = 0, padTop = 0, padRight = 0, padBottom = 0;
var hbox = CreateSections (frame, Enumerable.Range (1, (int)bitmap.Width - 1).Select (n => bitmap.GetPixel (n, (int)bitmap.Height - 1)));
var sec = hbox.FirstOrDefault (s => s.Mode != RenderMode.Fixed);
if (sec != null) {
padLeft = sec.Start;
padRight = bitmap.Width - 2 - padLeft - sec.Size;
}
var vbox = CreateSections (frame, Enumerable.Range (1, (int)bitmap.Height - 1).Select (n => bitmap.GetPixel ((int)bitmap.Width - 1, n)));
sec = vbox.FirstOrDefault (s => s.Mode != RenderMode.Fixed);
if (sec != null) {
padTop = sec.Start;
padBottom = bitmap.Height - 2 - padTop - sec.Size;
}
Padding = new WidgetSpacing (padLeft, padTop, padRight, padBottom);
frame.StretchableWidth = frame.HorizontalSections.Where (s => s.Mode != RenderMode.Fixed).Sum (s => s.Size);
frame.StretchableHeight = frame.VerticalSections.Where (s => s.Mode != RenderMode.Fixed).Sum (s => s.Size);
}