private void CoerceOptimalImageForSize(Size size)
        {
            if (_optimalImageForSize != null)
                return;
            var frame = Source as BitmapFrame;
            var num1 = (int) size.LogicalToDeviceUnits().Width;
            var num2 = -1;
            if (frame != null)
            {
                if (frame.Decoder == null) return;
                foreach (var bitmapFrame in frame.Decoder.Frames)
                {
                    var pixelWidth = bitmapFrame.PixelWidth;
                    if (pixelWidth == num1)
                    {
                        _optimalImageForSize = bitmapFrame;
                        break;
                    }
                    if (pixelWidth > num1)
                    {
                        if (num2 >= num1 && pixelWidth >= num2) continue;
                        num2 = pixelWidth;
                        _optimalImageForSize = bitmapFrame;
                    }
                    else if (pixelWidth > num2)
                    {
                        num2 = pixelWidth;
                        _optimalImageForSize = bitmapFrame;
                    }
                }
            }
            else
                _optimalImageForSize = Source;

        }
예제 #2
0
 /// <summary>
 /// Gets the actual size of the device.
 /// </summary>
 /// <param name="element">The element.</param>
 /// <returns>Size.</returns>
 public static Size GetDeviceActualSize(this FrameworkElement element)
 {
     Size size = new Size(element.ActualWidth, element.ActualHeight);
     return size.LogicalToDeviceUnits();
 }