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