public void CreateBitmap() { int width = 100; int height = 100; int dpi = 96; Tracing.Log(">> CreateBitmap"); var thread = new Thread(new ThreadStart(() => { Tracing.Log(">> CreateBitmap - Thread start; creating drawing visual"); //Dispatcher.Invoke(new Action(() => { _drawingVisual = new DrawingVisual(); _drawingContext = _drawingVisual.RenderOpen(); //})); Tracing.Log(">> CreateBitmap - Drawing to context"); _drawingContext.DrawRectangle(new SolidColorBrush(Colors.HotPink), new Pen(), new Rect(0, 0, 50, 50)); _drawingContext.DrawRectangle(new SolidColorBrush(Colors.Blue), new Pen(), new Rect(50, 0, 50, 50)); _drawingContext.DrawRectangle(new SolidColorBrush(Colors.Orange), new Pen(), new Rect(0, 50, 50, 50)); _drawingContext.DrawRectangle(new SolidColorBrush(Colors.DarkRed), new Pen(), new Rect(50, 50, 50, 50)); _drawingContext.Close(); Tracing.Log(">> CreateBitmap - Finished drawing; creating render target bitmap"); _bitmap = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Default); _bitmap.Render(_drawingVisual); Tracing.Log(">> CreateBitmap - Finished work"); _bitmap.Freeze(); })); //thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); }
private void ButtonSave_Click(object sender, RoutedEventArgs e) { var rect = new Rect { Width = 512, Height = 384 }; var dv = new DrawingVisual(); var dc = dv.RenderOpen(); dc.PushTransform(new TranslateTransform(-rect.X, -rect.Y)); dc.DrawRectangle(InkCanvasMain.Background, null, rect); InkCanvasMain.Strokes.Draw(dc); dc.Close(); var rtb = new RenderTargetBitmap((int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default); rtb.Render(dv); var enc = new PngBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(rtb)); var fn = TextBoxFileName.Text; if (!fn.EndsWith(".png", StringComparison.OrdinalIgnoreCase)) fn += ".png"; using (Stream s = File.Create(TegakiImageFolder + "/" + fn)) { enc.Save(s); } ((TegakiWindowViewModel)DataContext).AddToMediaList(System.IO.Path.GetFullPath(TegakiImageFolder + "/" + fn)); Close(); }
/// <summary> /// Construct new SelectionRectVisual object for the given rectangle /// </summary> public SelectionRectVisual(Point firstPointP, Point secondPointP, double zoomP) { DrawingGroup drawing = new DrawingGroup(); DrawingContext context = drawing.Open(); context.DrawRectangle(Brushes.White, null, new Rect(-1, -1, 3, 3)); context.DrawRectangle(Brushes.Black, null, new Rect(0.25, -1, 0.5, 3)); context.Close(); drawing.Freeze(); // Create a drawing brush that tiles the unit square from the drawing created above. // The size of the viewport and the rotation angle will be updated as we use the // dashed pen. DrawingBrush drawingBrush = new DrawingBrush(drawing); drawingBrush.ViewportUnits = BrushMappingMode.Absolute; drawingBrush.Viewport = new Rect(0, 0, _dashRepeatLength, _dashRepeatLength); drawingBrush.ViewboxUnits = BrushMappingMode.Absolute; drawingBrush.Viewbox = new Rect(0, 0, 1, 1); drawingBrush.Stretch = Stretch.Uniform; drawingBrush.TileMode = TileMode.Tile; // Store the drawing brush and a copy that's rotated by 90 degrees. _horizontalDashBrush = drawingBrush; _verticalDashBrush = drawingBrush.Clone(); _verticalDashBrush.Transform = new RotateTransform(90); this._firstPoint = firstPointP; this._secondPoint = secondPointP; this._zoom = zoomP; _visualForRect = new DrawingVisual(); this.AddVisualChild(_visualForRect); this.AddLogicalChild(_visualForRect); }
protected override void OnDrawMouseHover() { if (this.mouseHoverVisual != null) { this.Visuals.Remove(this.mouseHoverVisual); this.RemoveVisualChild(this.mouseHoverVisual); } var mouseHoverTileCoords = this.HoverTile; if (mouseHoverTileCoords.X < 0 || mouseHoverTileCoords.Y < 0) { this.mouseHoverVisual = null; } else { this.mouseHoverVisual = new DrawingVisual(); var tileRect = this.GetTileRectangleFromTilePoint(mouseHoverTileCoords); using (var drawingContext = this.mouseHoverVisual.RenderOpen()) { if (this.DrawPressedTile) { drawingContext.DrawImage(this.tileSetImage, tileRect); } else { drawingContext.DrawRectangle(this.HoverBrush, null, tileRect); } } this.Visuals.Add(this.mouseHoverVisual); this.AddVisualChild(this.mouseHoverVisual); } }
/// /// Gets a JPG "screenshot" of the current UIElement /// /// UIElement to screenshot /// Scale to render the screenshot /// JPG Quality /// Byte array of JPG data public byte[] GetJpgImage(double scale, int quality, int dpi) { double actualHeight = this.RootVisual.RenderSize.Height; double actualWidth = this.RootVisual.RenderSize.Width; double renderHeight = actualHeight * scale; double renderWidth = actualWidth * scale; RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)renderWidth, (int)renderHeight, dpi, dpi, PixelFormats.Pbgra32); VisualBrush sourceBrush = new VisualBrush(this.RootVisual); DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); using (drawingContext) { drawingContext.PushTransform(new ScaleTransform(scale, scale)); drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight))); } renderTarget.Render(drawingVisual); JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder(); jpgEncoder.QualityLevel = quality; jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget)); Byte[] _imageArray; using (MemoryStream outputStream = new MemoryStream()) { jpgEncoder.Save(outputStream); _imageArray = outputStream.ToArray(); } return _imageArray; }
public override DocumentPage GetPage(int pageNumber) { // Get the requested page. DocumentPage page = flowDocumentPaginator.GetPage(pageNumber); // Wrap the page in a Visual. You can then add a transformation and extras. ContainerVisual newVisual = new ContainerVisual(); newVisual.Children.Add(page.Visual); // Create a header. DrawingVisual header = new DrawingVisual(); using (DrawingContext context = header.RenderOpen()) { Typeface typeface = new Typeface("Times New Roman"); FormattedText text = new FormattedText("Page " + (pageNumber + 1).ToString(), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, 14, Brushes.Black); // Leave a quarter-inch of space between the page edge and this text. context.DrawText(text, new Point(96*0.25, 96*0.25)); } // Add the title to the visual. newVisual.Children.Add(header); // Wrap the visual in a new page. DocumentPage newPage = new DocumentPage(newVisual); return newPage; }
public System.IO.MemoryStream GetPNGImage2(double width, double height, double actualWidth, double actualHeight, bool whiteBG = false) { double dpiX = (width / actualWidth) * 96d; double dpiY = (height / actualHeight) * 96d; RenderTargetBitmap bitmap = new RenderTargetBitmap((int)width, (int)height, dpiX, dpiY, PixelFormats.Default); if (whiteBG) { DrawingVisual backgroundVisual = new System.Windows.Media.DrawingVisual(); using (var dc = backgroundVisual.RenderOpen()) dc.DrawRectangle(Brushes.White, null, new Rect(0, 0, actualWidth, actualHeight)); bitmap.Render(backgroundVisual); } bitmap.Render(m_visual); PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmap)); System.IO.MemoryStream returnStream = new System.IO.MemoryStream(); encoder.Save(returnStream); returnStream.Flush(); m_visual.Offset = new Vector(0, 0); return(returnStream); }
public void Draw( EdgeLayout layoutState ) { var styleState = myPresentation.GetPropertySetFor<EdgeStyle>().Get( Owner.Id ); var stream = new StreamGeometry(); var context = stream.Open(); context.BeginFigure( layoutState.Points.First(), false, false ); context.PolyBezierTo( layoutState.Points.Skip( 1 ).ToList(), true, false ); // draw arrow head var start = layoutState.Points.Last(); var v = start - layoutState.Points.ElementAt( layoutState.Points.Count() - 2 ); v.Normalize(); start = start - v * 0.15; context.BeginFigure( start + v * 0.28, true, true ); double t = v.X; v.X = v.Y; v.Y = -t; // Rotate 90° context.LineTo( start + v * 0.08, true, true ); context.LineTo( start + v * -0.08, true, true ); context.Close(); var pen = new Pen( styleState.Color, 0.016 ); // http://stackoverflow.com/questions/1755520/improve-drawingvisual-renders-speed Visual = new DrawingVisual(); var dc = Visual.RenderOpen(); dc.DrawGeometry( pen.Brush, pen, stream ); dc.Close(); Visual.SetValue( GraphItemProperty, Owner ); }
/// <summary> /// Creates a new System.Windows.Media.ImageSource of a specified FontAwesomeIcon and foreground System.Windows.Media.Brush. /// </summary> /// <param name="icon">The FontAwesome icon to be drawn.</param> /// <param name="foregroundBrush">The System.Windows.Media.Brush to be used as the foreground.</param> /// <returns>A new System.Windows.Media.ImageSource</returns> public static System.Windows.Media.ImageSource GetImageSource(int icon, System.Windows.Media.Brush foregroundBrush, double emSize = 100, double margin = 0) { string charIcon = char.ConvertFromUtf32(icon); if (_Typeface == null) { _Typeface = new System.Windows.Media.Typeface(FontFamily, System.Windows.FontStyles.Normal, System.Windows.FontWeights.Normal, System.Windows.FontStretches.Normal); } ; System.Windows.Media.DrawingVisual visual = new System.Windows.Media.DrawingVisual(); using (System.Windows.Media.DrawingContext drawingContext = visual.RenderOpen()) { FormattedText ft = new System.Windows.Media.FormattedText( charIcon, System.Globalization.CultureInfo.InvariantCulture, System.Windows.FlowDirection.LeftToRight, _Typeface, emSize - (2 * margin), foregroundBrush); ft.TextAlignment = System.Windows.TextAlignment.Center; drawingContext.DrawRectangle(null, new Pen(Brushes.Black, 0), new System.Windows.Rect(0, 0, emSize, emSize)); drawingContext.DrawText(ft, new System.Windows.Point(emSize / 2, margin)); }; return(new System.Windows.Media.DrawingImage(visual.Drawing)); }
public void DrawPoints(SortedList <double, double> points, Point[] line) { _children.Clear(); double width = ActualWidth; double height = ActualHeight; foreach (var point in line) { System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); double x = point.X * width; double y = height - point.Y * height; drawingContext.DrawEllipse(Brushes.Blue, null, new Point(x, y), 1, 1); drawingContext.Close(); _children.Add(drawingVisual); } foreach (var point in points) { System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); Pen pen = new Pen(Brushes.AntiqueWhite, 3); drawingContext.DrawEllipse(Brushes.Transparent, pen, new Point(point.Key * width, height - point.Value * height), 3, 3); drawingContext.Close(); _children.Add(drawingVisual); } }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object can be used to retrieve data from input parameters and /// to store data in output parameters.</param> protected override void SolveInstance(IGH_DataAccess DA) { Hp.Drawing drawing = new Hp.Drawing(); if (!DA.GetData <Hp.Drawing>(0, ref drawing)) { return; } Sm.DrawingVisual dwg = drawing.ToGeometryVisual(); double width = drawing.Width; double height = drawing.Height; if (width < 100) { width = 100; } if (height < 100) { height = 100; } img = dwg.ToBitmap(width, height); message = drawing.ToString(); UpdateMessage(); }
public DrawingPane() { this.children = new VisualCollection(this); this.drawing = new DrawingVisual(); this.children.Add(this.drawing); }
public static Sm.DrawingVisual ToGeometryVisual(this Drawing input) { Sm.DrawingVisual drawings = new Sm.DrawingVisual(); double scale = input.GetScale(); Rg.Curve curve = input.Frame.ToNurbsCurve(); double x0 = input.Frame.Center.X - input.Width / scale / 2; double x1 = input.Frame.Center.X + input.Width / scale / 2; double y0 = input.Frame.Center.Y - input.Height / scale / 2; double y1 = input.Frame.Center.Y + input.Height / scale / 2; Rg.Rectangle3d rect = new Rg.Rectangle3d(Rg.Plane.WorldXY, new Rg.Point3d(x0, y0, 0), new Rg.Point3d(x1, y1, 0)); drawings.Children.Add(new Shape(rect.ToNurbsCurve(), new Wg.Graphic(Wg.Strokes.Transparent, new Wg.Fill(input.Background))).ToVisualDrawing()); foreach (Shape shape in input.Shapes) { drawings.Children.Add(shape.ToVisualDrawing()); } Sm.TransformGroup xform = new Sm.TransformGroup(); double shiftW = (input.Width / scale / 2 - input.Frame.Center.X); double shiftH = -(input.Height / scale / 2 + input.Frame.Center.Y); xform.Children.Add(new Sm.TranslateTransform(shiftW, shiftH)); xform.Children.Add(new Sm.ScaleTransform(scale, (-1) * scale)); drawings.Transform = xform; return(drawings); }
public static Sm.DrawingVisual ToVisualDrawing(this Shape input) { Sm.DrawingVisual drawingVisual = new Sm.DrawingVisual(); Sm.DrawingContext drawingContext = drawingVisual.RenderOpen(); Sm.GeometryGroup drawing = new Sm.GeometryGroup(); if (input.IsCompound) { foreach (Geometry geo in input.Geometries) { Sm.Geometry geometry = geo.ToGeometry(); drawing.Children.Add(geometry); } } else { Sm.Geometry geometry = input.ToGeometry(); drawing.Children.Add(geometry); } drawingContext.DrawGeometry(input.Graphic.Fill.ToMediaBrush(), input.Graphic.Stroke.ToMediaPen(), drawing); drawingContext.Close(); if (input.Graphic.Effects.HasBlurEffect) { drawingVisual.Effect = input.Graphic.Effects.Blur.ToMediaEffect(); } if (input.Graphic.Effects.HasShadowEffect) { drawingVisual.Effect = input.Graphic.Effects.Shadow.ToMediaEffect(); } return(drawingVisual); }
internal static void DrawContextualMenu(DrawingVisual drawingVisual, Dictionary<int, string> itemsList) { //draw the stuff //3 cases //menu items == 7 //menu items < 7 //menu items > 7 DrawingContext context = drawingVisual.RenderOpen(); int itemsCount = itemsList.Count; if (itemsCount == 7) { } if (itemsCount < 7) { } if (itemsCount > 7) { } // position the menu correctly }
private ImageSource CreateImage(CustomMaterial material) { var bitmapSourceBackground = material.FlyerFrontSide.ToBitmapImage(); var visual = new DrawingVisual(); using (var drawingContext = visual.RenderOpen()) { drawingContext.PushClip(new RectangleGeometry(new Rect(0, 0, bitmapSourceBackground.Width, bitmapSourceBackground.Height))); drawingContext.DrawImage(bitmapSourceBackground, new Rect(0, 0, bitmapSourceBackground.Width, bitmapSourceBackground.Height)); foreach (var textField in material.MaterialFields.Select(materialToTextFieldConverter.CreateTextField)) { drawingContext.DrawText(textField.FormattedText, textField.Origin); } if (material.CustomLogo.HasLogo) { var flyerLogo = material.CustomLogo.Logo.ToBitmapImage(); drawingContext.DrawImage(flyerLogo, new Rect(material.CustomLogo.LogoLeftMargin, material.CustomLogo.LogoTopMargin, material.CustomLogo.LogoWidth, material.CustomLogo.LogoHeight)); } } var image = new DrawingImage(visual.Drawing); image.Freeze(); return image; }
// Create a DrawingVisual that contains a rectangle. private System.Windows.Media.DrawingVisual CreateUniverseGrid(bool[,] universe, int width, int height) { System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); // Retrieve the DrawingContext in order to create new drawing content. DrawingContext drawingContext = drawingVisual.RenderOpen(); int cellWidth = width / universe.GetLength(0); int cellHeight = height / universe.GetLength(1); for (int i = 0; i < universe.GetLength(0); i++) { for (int j = 0; j < universe.GetLength(1); j++) { // Create a rectangle and draw it in the DrawingContext. Rect rect = new Rect(new Point(i * cellWidth, j * cellHeight), new Size(cellWidth, cellHeight)); drawingContext.DrawRectangle( brush: !universe[i, j] ? Brushes.Black : Brushes.LightSalmon, pen: new Pen(Brushes.DarkGray, 1), rectangle: rect); } } // Persist the drawing content. drawingContext.Close(); return(drawingVisual); }
public VisualPaginator(DrawingVisual source, Size printSize, Thickness pageMargins, Thickness originalMargin) { DrawingVisual = source; _printSize = printSize; PageMargins = pageMargins; _originalMargin = originalMargin; }
private DrawingVisual CreateNodeVisual(VisibilityType visibility, bool IsHighlighted, bool IsPathHighlighted, bool IsSelected, bool UsedInConstruction) { var visual = new DrawingVisual(); using (var context = visual.RenderOpen()) { // Draw the actual circle var size = this.GetSize(IsHighlighted, IsPathHighlighted, IsSelected, UsedInConstruction); switch (visibility) { case VisibilityType.Important: context.DrawEllipse( this.GetFillBrush(IsSelected, UsedInConstruction), this.GetStrokePen(IsHighlighted, IsPathHighlighted, IsSelected, UsedInConstruction), new Point(0, 0), size.Width / 2, size.Height / 2); break; case VisibilityType.ShowWhenNecessary: if ((IsPathHighlighted) || (IsSelected) || (IsHighlighted) || (UsedInConstruction)) { context.DrawEllipse( this.GetFillBrush(IsSelected, UsedInConstruction), this.GetStrokePen(IsHighlighted, IsPathHighlighted, IsSelected, UsedInConstruction), new Point(0, 0), size.Width / 2, size.Height / 2); } break; } } return visual; }
private void RenderMyVisual(DrawingVisual v) { using (var dc = v.RenderOpen()) { RenderRectangles(dc); } }
public RadialMenu(uint nodeId, Point worldCoords, double radius, Dictionary<int, string> items, double startAngle, NodePart part) { this.startAngle = startAngle * Math.PI / 180; this.endAngle = (startAngle - 90) * Math.PI / 180; // 90: the radial menu is a quadrant this.nodePart = part; this.worldCoords = worldCoords; this.nodeId = nodeId; this.radius = radius; radialMenuVisual = new DrawingVisual(); radialMenuVisual.Transform = new TranslateTransform(worldCoords.X, worldCoords.Y); SetAnchor(); itemsList = items; reducedList = items; InitializeMenuItems(); UpdateItemsArrangement(-1); InitializeItemWeight(); ValidateScrollers(); Compose(); }
public void SaveToPng( Canvas surface, string file ) { // Save current canvas transform var transform = surface.LayoutTransform; // reset current transform (in case it is scaled or rotated) surface.LayoutTransform = null; var size = new Size( 1600, 900 ); // Attentation: Measure and arrange the surface ! surface.Measure( size ); surface.Arrange( new Rect( size ) ); var renderBitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32 ); var bounds = VisualTreeHelper.GetDescendantBounds( surface ); var dv = new DrawingVisual(); using ( var ctx = dv.RenderOpen() ) { var vb = new VisualBrush( surface ); ctx.DrawRectangle( vb, null, new Rect( new Point(), bounds.Size ) ); } renderBitmap.Render( dv ); using ( var outStream = new FileStream( file, FileMode.OpenOrCreate, FileAccess.Write ) ) { var encoder = new PngBitmapEncoder(); encoder.Frames.Add( BitmapFrame.Create( renderBitmap ) ); encoder.Save( outStream ); } // Restore previously saved layout surface.LayoutTransform = transform; }
public WaveGraph() { InitializeComponent(); DrawingVisual ghostVisual; Width = 300; Height = 350; ghostVisual = new DrawingVisual(); using (DrawingContext dc = ghostVisual.RenderOpen()) { dc.DrawEllipse(Brushes.Black, new Pen(Brushes.Red, 10), new Point(95, 95), 15, 15); dc.DrawEllipse(Brushes.Black, new Pen(Brushes.Red, 10), new Point(170, 105), 15, 15); Pen p = new Pen(Brushes.Black, 10); p.StartLineCap = PenLineCap.Round; p.EndLineCap = PenLineCap.Round; dc.DrawLine(p, new Point(75, 160), new Point(175, 150)); } this.AddVisualChild(ghostVisual); this.AddLogicalChild(ghostVisual); }
/// <summary> /// /// </summary> /// <param name="container"></param> /// <param name="renderer"></param> /// <returns></returns> private static Viewbox ToViewbox(Container container, IRenderer renderer) { var visual = new DrawingVisual(); using (var dc = visual.RenderOpen()) { renderer.Draw(dc, container, container.Properties, null); } visual.Drawing.Freeze(); var host = new VisualHost() { Width = container.Width, Height = container.Height }; host.Visuals.Add(visual); var vb = new Viewbox() { Stretch = Stretch.Uniform }; vb.Child = host; return vb; }
public static RenderTargetBitmap GetImage(UIElement fe, Brush background = null, Size sz = default(Size), int dpi = 144) { if (sz.Width < alib.Math.math.ε || sz.Height < alib.Math.math.ε) { fe.Measure(util.infinite_size); sz = fe.DesiredSize; //VisualTreeHelper.GetContentBounds(fe).Size; // } DrawingVisual dv = new DrawingVisual(); RenderOptions.SetEdgeMode(dv, EdgeMode.Aliased); using (DrawingContext ctx = dv.RenderOpen()) { Rect r = new Rect(0, 0, sz.Width, sz.Height); if (background != null) ctx.DrawRectangle(background, null, r); VisualBrush br = new VisualBrush(fe); br.AutoLayoutContent = true; ctx.DrawRectangle(br, null, r); } Double f = dpi / 96.0; RenderTargetBitmap bitmap = new RenderTargetBitmap( (int)(sz.Width * f) + 1, (int)(sz.Height * f) + 1, dpi, dpi, PixelFormats.Pbgra32); bitmap.Render(dv); return bitmap; }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { Drawing drawing = new Drawing(); if (!DA.GetData <Drawing>(0, ref drawing)) { return; } Sm.DrawingVisual dwg = drawing.ToGeometryVisual(); int dpi = 96; DA.GetData(1, ref dpi); if (dpi < 96) { dpi = 96; } double width = drawing.Width; double height = drawing.Height; BitmapEncoder encoding = new PngBitmapEncoder(); DA.SetData(0, dwg.ToBitmap(width, height, dpi, encoding)); }
public void Init_DrawLT(int running_train) { int i; int temp; int late_time_range; late_time_range = 1000; temp = 0; x1 = 30; y1 = 10; x2 = 700; y2 = 580; narrow_x = (double)running_train / (x2 - x1); narrow_y = (double)late_time_range / (y2 - y1); drawingVisual = new DrawingVisual(); dc = drawingVisual.RenderOpen(); dc.DrawLine(new Pen(Brushes.Black, 1.5), new Point(x1, x1), new Point(x1, y2)); dc.DrawLine(new Pen(Brushes.Black, 1.5), new Point(x1, y2), new Point(x2, y2)); dc.DrawText(new FormattedText("N", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 12, System.Windows.Media.Brushes.Black), new System.Windows.Point(x2 - 30, y2 + 6)); dc.DrawText(new FormattedText("T", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 12, System.Windows.Media.Brushes.Black), new System.Windows.Point(x1 - 10, y1 - 8)); for (i = 0; i < (x2 - x1); i++) { if (i % ((x2 - x1) / 5) == 0) { dc.DrawLine(new Pen(Brushes.Black, 1.5), new Point(x1 + i, y2), new Point(x1 + i, y2 - 3)); dc.DrawText(new FormattedText((temp * running_train / 5).ToString(), CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 12, System.Windows.Media.Brushes.Black), new System.Windows.Point(i + x1 - 5, y2 + 7)); temp++; } } temp = 0; for (i = 0; i < (y2 - y1); i++) { if (i % ((y2 - y1) / 5) == 0) { dc.DrawLine(new Pen(Brushes.Black, 1.5), new Point(x1, y2 - i), new Point(x1 + 3, y2 - i)); dc.DrawText(new FormattedText((temp * late_time_range / 5).ToString(), CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 12, System.Windows.Media.Brushes.Black), new System.Windows.Point(x1 - 28, y2 - i - 9)); temp++; } } }
protected override sealed void CreateImage(ImageGenerationContext context) { base.CreateImage(context); Rect bounds = new Rect(StrokeWidth / 2, StrokeWidth / 2, CalculatedWidth - StrokeWidth, CalculatedHeight - StrokeWidth); Brush brush = Fill.GetBrush(); Pen pen = GetPen(); DrawingVisual dv = new DrawingVisual(); DrawingContext dc = dv.RenderOpen(); if (Roundness == 0) dc.DrawRectangle(brush, pen, bounds); else dc.DrawRoundedRectangle(brush, pen, bounds, Roundness, Roundness); dc.Close(); RenderTargetBitmap rtb = RenderTargetBitmapUtility.CreateRenderTargetBitmap(CalculatedWidth, CalculatedHeight); rtb.Render(dv); Bitmap = new FastBitmap(rtb); }
protected override sealed void CreateImage() { base.CreateImage(); Rect bounds = new Rect(StrokeWidth / 2, StrokeWidth / 2, CalculatedWidth - StrokeWidth, CalculatedHeight - StrokeWidth); Brush brush = Fill.GetBrush(); PointCollection points = GetPoints(bounds); PathGeometry geometry = CanonicalSplineHelper.CreateSpline(points, Roundness / 100.0, null, true, true, 0.25); Pen pen = GetPen(); DrawingVisual dv = new DrawingVisual(); DrawingContext dc = dv.RenderOpen(); // Draw polygon. dc.DrawGeometry(brush, pen, geometry); dc.Close(); RenderTargetBitmap rtb = RenderTargetBitmapUtility.CreateRenderTargetBitmap(CalculatedWidth, CalculatedHeight); rtb.Render(dv); Bitmap = new FastBitmap(rtb); }
/// <summary> /// Applies the filter to the specified <paramref name="bitmap"/>. This method /// first calls <see cref="ImageReplacementFilter.GetDestinationDimensions(FastBitmap, out Int32, out Int32)" /> /// to calculate the size of the destination image. Then it calls /// <see cref="ImageReplacementFilter.ApplyFilter(FastBitmap, DrawingContext, int, int)" /> /// which is where the overridden class implements its filter algorithm. /// </summary> /// <param name="bitmap"> /// Image to apply the <see cref="ImageReplacementFilter" /> to. /// </param> public override sealed void ApplyFilter(FastBitmap bitmap) { OnBeginApplyFilter(bitmap); // get destination dimensions int width, height; bool shouldContinue = GetDestinationDimensions(bitmap, out width, out height); if (!shouldContinue) return; DrawingVisual dv = new DrawingVisual(); ConfigureDrawingVisual(bitmap, dv); DrawingContext dc = dv.RenderOpen(); ApplyFilter(bitmap, dc, width, height); dc.Close(); RenderTargetBitmap rtb = RenderTargetBitmapUtility.CreateRenderTargetBitmap(width, height); rtb.Render(dv); FastBitmap destination = new FastBitmap(rtb); // copy metadata // TODO /*foreach (PropertyItem propertyItem in bitmap.InnerBitmap.PropertyItems) destination.InnerBitmap.SetPropertyItem(propertyItem);*/ // set new image bitmap.InnerBitmap = destination.InnerBitmap; OnEndApplyFilter(); }
public static RenderTargetBitmap GetRenderTargetBitmap(this UIElement source, double scale) { if (source.RenderSize.Height == 0 || source.RenderSize.Width == 0) return null; double actualHeight = source.RenderSize.Height; double actualWidth = source.RenderSize.Width; double renderHeight = actualHeight*scale; double renderWidth = actualWidth*scale; var renderTarget = new RenderTargetBitmap((int) renderWidth, (int) renderHeight, 96, 96, PixelFormats.Pbgra32); var sourceBrush = new VisualBrush(source); var drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); using (drawingContext) { drawingContext.PushTransform(new ScaleTransform(scale, scale)); drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight))); } renderTarget.Render(drawingVisual); return renderTarget; }
public void SetPreviewElement(FrameworkElement element) { double x = 0; double y = 0; GetCurrentDPI(out x, out y); // Does the DrawingBrush thing seem a little hacky? Yeah, it's a necessary hack. See: // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=364041 Rect bounds = VisualTreeHelper.GetDescendantBounds(element); RenderTargetBitmap r = new RenderTargetBitmap((int)(element.ActualWidth * x / 96), (int)(element.ActualHeight * y / 96), (int)x, (int)y, PixelFormats.Pbgra32); DrawingVisual dv = new DrawingVisual(); using (DrawingContext ctx = dv.RenderOpen()) { VisualBrush vb = new VisualBrush(element); ctx.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size)); } r.Render(dv); DragImage = r; InvalidateMeasure(); }
protected override void OnUpdate(double[] values) { const double space = 3; const double barwidth = 8; int pts = values.Length / 2; int width = 1000;//pts * (space + barwidth) - space; int height = width / 4; if (_bmp == null || width != _bmp.PixelWidth) { _bmp = new RenderTargetBitmap(width, height, 120, 96, PixelFormats.Pbgra32); } DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); Brush brush = DrawingBrush.Clone(); brush.Freeze(); double totalWidth = width / pts; double totalBarWidth = totalWidth * ((barwidth) / (barwidth + space)); double totalSpace = totalWidth * ((space) / (barwidth + space)); for (int i = 0; i < pts; i++) { double x = i * totalWidth; double y1 = height; double y2 = y1 - values[i] * height; drawingContext.DrawRectangle(brush, null, new Rect(x, y2, totalBarWidth, y1)); } drawingContext.Close(); _bmp.Clear(); _bmp.Render(drawingVisual); PART_visualationDisplay.Source = _bmp; }
/// <summary> /// </summary> /// <param name="source"> </param> /// <param name="scale"> </param> /// <param name="quality"> </param> /// <returns> </returns> public static byte[] GetJpgImage(UIElement source, double scale, int quality) { var actualHeight = source.RenderSize.Height; var actualWidth = source.RenderSize.Width; var renderHeight = actualHeight * scale; var renderWidth = actualWidth * scale; var renderTarget = new RenderTargetBitmap((int) renderWidth, (int) renderHeight, 96, 96, PixelFormats.Pbgra32); var sourceBrush = new VisualBrush(source); var drawingVisual = new DrawingVisual(); var drawingContext = drawingVisual.RenderOpen(); using (drawingContext) { drawingContext.PushTransform(new ScaleTransform(scale, scale)); drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight))); } renderTarget.Render(drawingVisual); var jpgEncoder = new JpegBitmapEncoder { QualityLevel = quality }; jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget)); Byte[] imageArray; using (var outputStream = new MemoryStream()) { jpgEncoder.Save(outputStream); imageArray = outputStream.ToArray(); } return imageArray; }
public static byte[] GetScreenShot(this UIElement source, double scale, int quality) { double renderHeight = source.RenderSize.Height * scale; double renderWidth = source.RenderSize.Width * scale; RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)renderWidth, (int)renderHeight, 96, 96, PixelFormats.Pbgra32); VisualBrush sourceBrush = new VisualBrush(source); DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); using (drawingContext) { drawingContext.PushTransform(new ScaleTransform(scale, scale)); drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(source.RenderSize.Width, source.RenderSize.Height))); } renderTarget.Render(drawingVisual); JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder(); jpgEncoder.QualityLevel = quality; jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget)); Byte[] image; using (MemoryStream outputStream = new MemoryStream()) { jpgEncoder.Save(outputStream); image = outputStream.ToArray(); } return image; }
protected override Effect GetEffect(FastBitmap source) { // Fill temporary graphics buffer with mask (currently always a rectangle). DrawingVisual dv = new DrawingVisual { Effect = new BlurEffect { Radius = Radius, KernelType = KernelType.Gaussian } }; DrawingContext dc = dv.RenderOpen(); dc.DrawImage(source.InnerBitmap, new Rect(0, 0, source.Width, source.Height)); dc.Close(); RenderTargetBitmap rtb = RenderTargetBitmapUtility.CreateRenderTargetBitmap(source.Width, source.Height); rtb.Render(dv); Brush blurredImage = new ImageBrush(rtb); return new UnsharpMaskEffect { BlurMask = blurredImage, Amount = Amount / 100.0, Threshold = Threshold }; }
/// <summary> /// Преобразует XAML Drawing/DrawingGroup в png base64 string /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="drawing"></param> /// <returns>Base64 string containing png bitmap</returns> public static string XamlDrawingToPngBase64String(int width, int height, Drawing drawing) { var bitmapEncoder = new PngBitmapEncoder(); // The image parameters... double dpiX = 96; double dpiY = 96; // The Visual to use as the source of the RenderTargetBitmap. var drawingVisual = new DrawingVisual(); using (var drawingContext = drawingVisual.RenderOpen()) { drawingContext.DrawDrawing(drawing); } var bounds = drawingVisual.ContentBounds; var targetBitmap = new RenderTargetBitmap( width * 10, height * 10, dpiX, dpiY, PixelFormats.Pbgra32); drawingVisual.Transform = new ScaleTransform(width * 10 / bounds.Width, height * 10 / bounds.Height); targetBitmap.Render(drawingVisual); // Encoding the RenderBitmapTarget as an image. bitmapEncoder.Frames.Add(BitmapFrame.Create(targetBitmap)); byte[] values; using (var str = new MemoryStream()) { bitmapEncoder.Save(str); values = str.ToArray(); } return Convert.ToBase64String(values); }
public void CreateFromImage(Bitmap image) { this.image = image; initialClip = new RectangleF(0, 0, image.Width, image.Height); bounds = initialClip.ToWpf(); visual = drawingVisual = new swm.DrawingVisual(); Control = drawingVisual.RenderOpen(); Control.DrawImage(image.ToWpf(1), bounds); }
// Create a DrawingVisual that contains an ellipse. private System.Windows.Media.DrawingVisual CreateDrawingVisualEllipses() { System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); drawingContext.DrawEllipse(Brushes.Maroon, null, new Point(430, 136), 20, 20); drawingContext.Close(); return(drawingVisual); }
public void CreateFromImage(Bitmap image) { this.image = image; drawingVisual = new swm.DrawingVisual(); Control = drawingVisual.RenderOpen(); Control.DrawImage(image.ControlObject as swm.ImageSource, new sw.Rect(0, 0, image.Size.Width, image.Size.Height)); visual = drawingVisual; this.ImageInterpolation = Eto.Drawing.ImageInterpolation.Default; }
public void CreateFromImage(Bitmap image) { this.image = image; bounds = new sw.Rect(0, 0, image.Size.Width, image.Size.Height); drawingVisual = new swm.DrawingVisual(); visual = drawingVisual; Control = drawingVisual.RenderOpen(); Control.DrawImage(image.ControlObject as swm.ImageSource, bounds); PushGuideLines(bounds); ImageInterpolation = ImageInterpolation.Default; }
public static Bitmap ToBitmap(this System.Windows.Media.DrawingVisual drawing, double width, double height, int dpi, BitmapEncoder encoder) { var bitmap = new RenderTargetBitmap((int)(width / 96 * dpi), (int)(height / 96 * dpi), dpi, dpi, PixelFormats.Pbgra32); bitmap.Render(drawing); MemoryStream stream = new MemoryStream(); encoder.Frames.Add(BitmapFrame.Create(bitmap)); encoder.Save(stream); return(new Bitmap(stream)); }
public GraphicsHandler(swm.Visual visual, swm.DrawingContext context, sw.Rect bounds, RectangleF initialClip, bool shouldDispose = true) { disposeControl = shouldDispose; this.visual = visual; drawingVisual = visual as swm.DrawingVisual; Control = context; this.bounds = bounds; this.initialClip = initialClip; Control.PushClip(new swm.RectangleGeometry(bounds)); }
public swmi.BitmapFrame Get(swmi.BitmapSource image, float scale, int width, int height, swm.BitmapScalingMode scalingMode) { if (width <= 0 || height <= 0 || scale <= 0) { return(null); } var _cachedFrame = _cachedFrameReference?.Target as swmi.BitmapFrame; // if parameters are the same, return cached bitmap if (_cachedFrame != null && scale == _scale && width == _width && height == _height && scalingMode == _scalingMode) { return(_cachedFrame); } // generate a new bitmap with the desired size & scale. var scaledwidth = (int)Math.Round(width * scale); var scaledheight = (int)Math.Round(height * scale); if (scaledwidth <= 0 || scaledheight <= 0) { return(null); } var group = new swm.DrawingGroup(); swm.RenderOptions.SetBitmapScalingMode(group, scalingMode); group.Children.Add(new swm.ImageDrawing(image, new sw.Rect(0, 0, width, height))); var targetVisual = new swm.DrawingVisual(); using (var targetContext = targetVisual.RenderOpen()) targetContext.DrawDrawing(group); // note, this uses a GDI handle, which are limited (only 5000 or so can be created). // There's no way to get around it other than just not creating that many and using GC.Collect/WaitForPendingFinalizers. // we can't do it in Eto as it'd be a serious performance hit. var target = new swmi.RenderTargetBitmap(scaledwidth, scaledheight, 96 * scale, 96 * scale, swm.PixelFormats.Default); target.Render(targetVisual); target.Freeze(); _cachedFrame = swmi.BitmapFrame.Create(target); _cachedFrame.Freeze(); _scale = scale; _width = width; _height = height; _scalingMode = scalingMode; _cachedFrameReference = new WeakReference(_cachedFrame); return(_cachedFrame); }
public GraphicsHandler(swm.Visual visual, swm.DrawingContext context, sw.Rect bounds, bool shouldDispose = true) { this.disposeControl = shouldDispose; this.visual = visual; this.drawingVisual = visual as swm.DrawingVisual; this.Control = context; this.bounds = bounds; PushGuideLines(bounds); this.Control.PushClip(new swm.RectangleGeometry(bounds)); this.ImageInterpolation = Eto.Drawing.ImageInterpolation.Default; }
public void Clear(SolidBrush brush) { var rect = clipBounds ?? initialClip; if (drawingVisual != null) { CloseGroup(); // bitmap Control.Close(); var newbmp = new swmi.RenderTargetBitmap((int)bounds.Width, (int)bounds.Height, 96, 96, swm.PixelFormats.Pbgra32); newbmp.RenderWithCollect(visual); swm.Geometry maskgeometry; if (clipPath != null) { maskgeometry = clipPath; } else { maskgeometry = new swm.RectangleGeometry(rect.ToWpf()); } var boundsgeometry = new swm.RectangleGeometry(bounds); maskgeometry = swm.Geometry.Combine(boundsgeometry, maskgeometry, swm.GeometryCombineMode.Exclude, null); var dr = new swm.GeometryDrawing(swm.Brushes.Black, null, maskgeometry); var db = new swm.DrawingBrush(dr); visual = drawingVisual = new swm.DrawingVisual(); Control = drawingVisual.RenderOpen(); Control.PushOpacityMask(db); Control.DrawImage(newbmp, bounds); Control.Pop(); ApplyAll(); } else { // drawable if (brush == null || brush.Color.A < 1.0f) { Widget.FillRectangle(Brushes.Black, rect); } } if (brush != null) { Widget.FillRectangle(brush, rect); } }
public GraphicsHandler(swm.Visual visual, swm.DrawingContext context, sw.Rect bounds, RectangleF initialClip, bool shouldDispose = true) { disposeControl = shouldDispose; this.visual = visual; drawingVisual = visual as swm.DrawingVisual; Control = context; this.bounds = bounds; this.initialClip = initialClip; PushGuideLines(bounds); Control.PushClip(new swm.RectangleGeometry(bounds)); ImageInterpolation = ImageInterpolation.Default; }
// Create a DrawingVisual that contains a rectangle. private System.Windows.Media.DrawingVisual CreateDrawingVisualRectangle() { System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); // Retrieve the DrawingContext in order to create new drawing content. DrawingContext drawingContext = drawingVisual.RenderOpen(); // Create a rectangle and draw it in the DrawingContext. Rect rect = new Rect(new Point(160, 100), new Size(320, 80)); drawingContext.DrawRectangle(Brushes.LightBlue, null, rect); // Persist the drawing content. drawingContext.Close(); return(drawingVisual); }
private DrawingVisual CreateDrawingVisualAA() { System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); drawingVisual.XSnappingGuidelines = new DoubleCollection(new List <double>() { 1 }); drawingVisual.YSnappingGuidelines = new DoubleCollection(new List <double>() { 1 }); drawingContext.DrawLine(new Pen(Brushes.Maroon, 1), new Point(430, 136), new Point(136, 430)); drawingContext.Close(); return(drawingVisual); }
/// <summary> /// Resizes a bitmap frame /// </summary> /// <param name="photo"></param> /// <param name="width"></param> /// <param name="height"></param> /// <param name="scalingMode"></param> /// <returns></returns> public static BitmapFrame Resize(BitmapFrame photo, int width, int height, System.Windows.Media.BitmapScalingMode scalingMode) { var group = new System.Windows.Media.DrawingGroup(); System.Windows.Media.RenderOptions.SetBitmapScalingMode(group, scalingMode); group.Children.Add(new System.Windows.Media.ImageDrawing(photo, new System.Windows.Rect(0, 0, width, height))); var targetVisual = new System.Windows.Media.DrawingVisual(); var targetContext = targetVisual.RenderOpen(); targetContext.DrawDrawing(group); var target = new RenderTargetBitmap(width, height, 96, 96, System.Windows.Media.PixelFormats.Default); targetContext.Close(); target.Render(targetVisual); var targetFrame = BitmapFrame.Create(target); return(targetFrame); }
public override object Resize(object handle, double width, double height) { var oldImg = (SWMI.BitmapSource)handle; width = WidthToDPI(oldImg, width); height = HeightToDPI(oldImg, height); SWM.DrawingVisual visual = new SWM.DrawingVisual(); using (SWM.DrawingContext ctx = visual.RenderOpen()) { ctx.DrawImage(oldImg, new System.Windows.Rect(0, 0, width, height)); } SWMI.RenderTargetBitmap bmp = new SWMI.RenderTargetBitmap((int)width, (int)height, oldImg.DpiX, oldImg.DpiY, oldImg.Format); bmp.Render(visual); return(bmp); }
public void Create(Image image, int width, int height, ImageInterpolation interpolation) { ApplicationHandler.InvokeIfNecessary(() => { var source = image.ToWpf(); // use drawing group to allow for better quality scaling var group = new swm.DrawingGroup(); swm.RenderOptions.SetBitmapScalingMode(group, interpolation.ToWpf()); group.Children.Add(new swm.ImageDrawing(source, new sw.Rect(0, 0, width, height))); var drawingVisual = new swm.DrawingVisual(); using (var drawingContext = drawingVisual.RenderOpen()) drawingContext.DrawDrawing(group); var resizedImage = new swm.Imaging.RenderTargetBitmap(width, height, source.DpiX, source.DpiY, swm.PixelFormats.Default); resizedImage.Render(drawingVisual); Control = resizedImage; }); }
static swmi.BitmapFrame Resize(swmi.BitmapSource image, float scale, int width, int height, swm.BitmapScalingMode scalingMode) { var group = new swm.DrawingGroup(); swm.RenderOptions.SetBitmapScalingMode(group, scalingMode); group.Children.Add(new swm.ImageDrawing(image, new sw.Rect(0, 0, width, height))); var targetVisual = new swm.DrawingVisual(); var targetContext = targetVisual.RenderOpen(); targetContext.DrawDrawing(group); width = (int)Math.Round(width * scale); height = (int)Math.Round(height * scale); var target = new swmi.RenderTargetBitmap(width, height, 96 * scale, 96 * scale, swm.PixelFormats.Default); targetContext.Close(); target.Render(targetVisual); return(swmi.BitmapFrame.Create(target)); }
ImageSource RenderFrame(ApplicationContext actx, double scaleFactor, double width, double height) { ImageDescription idesc = new ImageDescription() { Alpha = 1, Size = new Size(width * scaleFactor, height * scaleFactor) }; SWM.DrawingVisual visual = new SWM.DrawingVisual(); using (SWM.DrawingContext ctx = visual.RenderOpen()) { Draw(actx, ctx, 1, 0, 0, idesc); } SWMI.RenderTargetBitmap bmp = new SWMI.RenderTargetBitmap((int)idesc.Size.Width, (int)idesc.Size.Height, 96, 96, PixelFormats.Pbgra32); bmp.Render(visual); AddFrame(bmp); return(bmp); }
public override object Crop(object handle, int srcX, int srcY, int w, int h) { var oldImg = (SWMI.BitmapSource)handle; double width = WidthToDPI(oldImg, w); double height = HeightToDPI(oldImg, h); SWM.DrawingVisual visual = new SWM.DrawingVisual(); using (SWM.DrawingContext ctx = visual.RenderOpen()) { //Not sure whether this actually works, untested ctx.DrawImage(oldImg, new System.Windows.Rect(-srcX, -srcY, srcX + width, srcY + height)); } SWMI.RenderTargetBitmap bmp = new SWMI.RenderTargetBitmap((int)width, (int)height, oldImg.DpiX, oldImg.DpiY, oldImg.Format); bmp.Render(visual); return(bmp); }
public GraphicsHandler(swm.Visual visual, swm.DrawingContext context, sw.Rect bounds, bool shouldDispose = true) { this.disposeControl = shouldDispose; this.visual = visual; this.drawingVisual = visual as swm.DrawingVisual; this.Control = context; //if (DPI != new sw.Size(1.0, 1.0)) // this.Control.PushTransform (new swm.ScaleTransform (DPI.Width, DPI.Height)); var dpi = DPI; this.bounds = bounds; this.Control.PushClip(new swm.RectangleGeometry(bounds)); PushGuideLines(bounds); this.ImageInterpolation = Eto.Drawing.ImageInterpolation.Default; }
ImageSource RenderFrame(ApplicationContext actx, double scaleFactor, ImageDescription idesc) { SWM.DrawingVisual visual = new SWM.DrawingVisual(); using (SWM.DrawingContext ctx = visual.RenderOpen()) { ctx.PushTransform(new ScaleTransform(scaleFactor, scaleFactor)); Draw(actx, ctx, scaleFactor, 0, 0, idesc); ctx.Pop(); } SWMI.RenderTargetBitmap bmp = new SWMI.RenderTargetBitmap((int)(idesc.Size.Width * scaleFactor), (int)(idesc.Size.Height * scaleFactor), 96, 96, PixelFormats.Pbgra32); bmp.Render(visual); var f = new ImageFrame(bmp, idesc.Size.Width, idesc.Size.Height); if (drawCallback == null) { AddFrame(f); } return(bmp); }
// Create a DrawingVisual that contains text. private System.Windows.Media.DrawingVisual CreateDrawingVisualText() { // Create an instance of a DrawingVisual. System.Windows.Media.DrawingVisual drawingVisual = new System.Windows.Media.DrawingVisual(); // Retrieve the DrawingContext from the DrawingVisual. DrawingContext drawingContext = drawingVisual.RenderOpen(); // Draw a formatted text string into the DrawingContext. drawingContext.DrawText( new FormattedText("Click Me!", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 36, Brushes.Black), new Point(200, 116)); // Close the DrawingContext to persist changes to the DrawingVisual. drawingContext.Close(); return(drawingVisual); }
ImageSource RenderFrame(ApplicationContext actx, double scaleFactor, double width, double height) { ImageDescription idesc = new ImageDescription() { Alpha = 1, Size = new Size(width, height) }; SWM.DrawingVisual visual = new SWM.DrawingVisual(); using (SWM.DrawingContext ctx = visual.RenderOpen()) { ctx.PushTransform(new ScaleTransform(scaleFactor, scaleFactor)); Draw(actx, ctx, scaleFactor, 0, 0, idesc); ctx.Pop(); } SWMI.RenderTargetBitmap bmp = new SWMI.RenderTargetBitmap((int)(width * scaleFactor), (int)(height * scaleFactor), 96, 96, PixelFormats.Pbgra32); bmp.Render(visual); var f = new ImageFrame(bmp, width, height); AddFrame(f); return(bmp); }
public DrawGraphicsOnBitmap() { Title = "Draw Graphics on Bitmap"; // ��Ʈ���� ������� �����ϱ� ���� ����� ������. Background = Brushes.Khaki; // RenderTargetBitmap ������. RenderTargetBitmap renderbitmap = new RenderTargetBitmap(100, 100, 96, 96, PixelFormats.Default); // DrawingVisual ��ü�� ������. DrawingVisual drawvis = new DrawingVisual(); DrawingContext dc = drawvis.RenderOpen(); // Render �ҵ� ȣ�� dc.DrawRoundedRectangle(Brushes.Blue, new Pen(Brushes.Red, 10), new Rect(25, 25, 50, 50), 10, 10); dc.Close(); // RenderTargetBitmap ���� DrawingVisual ��ü�� ��. renderbitmap.Render(drawvis); // �̹��� ��ä ���� -> ������Ƽ ���� Image img = new Image(); img.Source = renderbitmap; // ��� Content = img; }