private static BitmapInterpolationMode ConvertInterpolationMode(Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode interpolationMode) { switch (interpolationMode) { case Visuals.Media.Imaging.BitmapInterpolationMode.Default: return(BitmapInterpolationMode.Fant); case Visuals.Media.Imaging.BitmapInterpolationMode.LowQuality: return(BitmapInterpolationMode.NearestNeighbor); case Visuals.Media.Imaging.BitmapInterpolationMode.MediumQuality: return(BitmapInterpolationMode.Fant); default: case Visuals.Media.Imaging.BitmapInterpolationMode.HighQuality: return(BitmapInterpolationMode.HighQualityCubic); } }
private static InterpolationMode GetInterpolationMode(BitmapInterpolationMode interpolationMode) { switch (interpolationMode) { case BitmapInterpolationMode.LowQuality: return(InterpolationMode.NearestNeighbor); case BitmapInterpolationMode.MediumQuality: return(InterpolationMode.Linear); case BitmapInterpolationMode.HighQuality: return(InterpolationMode.HighQualityCubic); case BitmapInterpolationMode.Default: return(InterpolationMode.Linear); default: throw new ArgumentOutOfRangeException(nameof(interpolationMode), interpolationMode, null); } }
public WicBitmapImpl(Stream stream, int decodeSize, bool horizontal, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode interpolationMode) { _decoder = new BitmapDecoder(Direct2D1Platform.ImagingFactory, stream, DecodeOptions.CacheOnLoad); var frame = _decoder.GetFrame(0); // now scale that to the size that we want var realScale = horizontal ? ((double)frame.Size.Height / frame.Size.Width) : ((double)frame.Size.Width / frame.Size.Height); PixelSize desired; if (horizontal) { desired = new PixelSize(decodeSize, (int)(realScale * decodeSize)); } else { desired = new PixelSize((int)(realScale * decodeSize), decodeSize); } if (frame.Size.Width != desired.Width || frame.Size.Height != desired.Height) { using (var scaler = new BitmapScaler(Direct2D1Platform.ImagingFactory)) { scaler.Initialize(frame, desired.Width, desired.Height, ConvertInterpolationMode(interpolationMode)); WicImpl = new Bitmap(Direct2D1Platform.ImagingFactory, scaler, BitmapCreateCacheOption.CacheOnLoad); } } else { WicImpl = new Bitmap(Direct2D1Platform.ImagingFactory, frame, BitmapCreateCacheOption.CacheOnLoad); } Dpi = new Vector(96, 96); }
/// <summary> /// Draws a bitmap image. /// </summary> /// <param name="source">The bitmap image.</param> /// <param name="opacity">The opacity to draw with.</param> /// <param name="sourceRect">The rect in the image to draw.</param> /// <param name="destRect">The rect in the output to draw to.</param> /// <param name="bitmapInterpolationMode">The bitmap interpolation mode.</param> public void DrawImage(IRef <IBitmapImpl> source, double opacity, Rect sourceRect, Rect destRect, BitmapInterpolationMode bitmapInterpolationMode) { using (var d2d = ((BitmapImpl)source.Item).GetDirect2DBitmap(_deviceContext)) { var interpolationMode = GetInterpolationMode(bitmapInterpolationMode); _deviceContext.DrawBitmap( d2d.Value, destRect.ToSharpDX(), (float)opacity, interpolationMode, sourceRect.ToSharpDX(), null); } }
public WriteableWicBitmapImpl(Stream stream, int decodeSize, bool horizontal, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode interpolationMode) : base(stream, decodeSize, horizontal, interpolationMode) { }