private BitmapRenderTarget RenderIntermediate( SharpDX.Direct2D1.RenderTarget target, BitmapImpl bitmap, TileBrushCalculator calc) { var result = new BitmapRenderTarget( target, CompatibleRenderTargetOptions.None, calc.IntermediateSize.ToSharpDX()); using (var context = new RenderTarget(result).CreateDrawingContext(null)) { var dpi = new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height); var rect = new Rect(bitmap.PixelSize.ToSizeWithDpi(dpi)); context.Clear(Colors.Transparent); context.PushClip(calc.IntermediateClip); context.Transform = calc.IntermediateTransform; context.DrawBitmap(RefCountable.CreateUnownedNotClonable(bitmap), 1, rect, rect, _bitmapInterpolationMode); context.PopClip(); } return(result); }
public ImageBrushImpl( ITileBrush brush, SharpDX.Direct2D1.RenderTarget target, BitmapImpl bitmap, Size targetSize) { var dpi = new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height); var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSizeWithDpi(dpi), targetSize); if (!calc.NeedsIntermediate) { _bitmap = bitmap.GetDirect2DBitmap(target); PlatformBrush = new BitmapBrush( target, _bitmap.Value, GetBitmapBrushProperties(brush), GetBrushProperties(brush, calc.DestinationRect)); } else { using (var intermediate = RenderIntermediate(target, bitmap, calc)) { PlatformBrush = new BitmapBrush( target, intermediate.Bitmap, GetBitmapBrushProperties(brush), GetBrushProperties(brush, calc.DestinationRect)); } } _bitmapInterpolationMode = brush.BitmapInterpolationMode; }
public ImageBrushImpl( ITileBrush brush, SharpDX.Direct2D1.RenderTarget target, BitmapImpl bitmap, Size targetSize) { var calc = new TileBrushCalculator(brush, new Size(bitmap.PixelWidth, bitmap.PixelHeight), targetSize); if (!calc.NeedsIntermediate) { PlatformBrush = new BitmapBrush( target, bitmap.GetDirect2DBitmap(target), GetBitmapBrushProperties(brush), GetBrushProperties(brush, calc.DestinationRect)); } else { using (var intermediate = RenderIntermediate(target, bitmap, calc)) { PlatformBrush = new BitmapBrush( target, intermediate.Bitmap, GetBitmapBrushProperties(brush), GetBrushProperties(brush, calc.DestinationRect)); } } }
/// <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> public void DrawImage(IBitmap source, double opacity, Rect sourceRect, Rect destRect) { BitmapImpl impl = (BitmapImpl)source.PlatformImpl; Bitmap d2d = impl.GetDirect2DBitmap(_renderTarget); _renderTarget.DrawBitmap( d2d, destRect.ToSharpDX(), (float)opacity, BitmapInterpolationMode.Linear, sourceRect.ToSharpDX()); }
private BitmapRenderTarget RenderIntermediate( SharpDX.Direct2D1.RenderTarget target, BitmapImpl bitmap, TileBrushCalculator calc) { var result = new BitmapRenderTarget( target, CompatibleRenderTargetOptions.None, calc.IntermediateSize.ToSharpDX()); using (var context = new RenderTarget(result).CreateDrawingContext(null)) { var rect = new Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight); context.Clear(Colors.Transparent); context.PushClip(calc.IntermediateClip); context.Transform = calc.IntermediateTransform; context.DrawImage(bitmap, 1, rect, rect); context.PopClip(); } return(result); }