Esempio n. 1
0
        public static RenderTargetBitmap SaveCanvasToBitmap(Canvas canvas)
        {
            // Save current canvas transform
            Transform transform = canvas.LayoutTransform;
            // reset current transform (in case it is scaled or rotated)
            canvas.LayoutTransform = null;

            // Get the size of canvas
            Size size = new Size(canvas.Width, canvas.Height);
            // Measure and arrange the surface
            // VERY IMPORTANT
            canvas.Measure(size);
            canvas.Arrange(new Rect(size));

            // Create a render bitmap and push the surface to it
            RenderTargetBitmap renderBitmap =
              new RenderTargetBitmap(
                (int)size.Width,
                (int)size.Height,
                96d,
                96d,
                PixelFormats.Pbgra32);
            renderBitmap.Render(canvas);

            return renderBitmap;
        }
Esempio n. 2
0
        /// <summary>
        /// Exports the specified plot model to an xps file.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="fileName">The file name.</param>
        /// <param name="width">The width.</param>
        /// <param name="height">The height.</param>
        /// <param name="background">The background color.</param>
        public static void Export(IPlotModel model, string fileName, double width, double height, OxyColor background)
        {
            using (var xpsPackage = Package.Open(fileName, FileMode.Create, FileAccess.ReadWrite))
            {
                using (var doc = new XpsDocument(xpsPackage))
                {
                    var canvas = new Canvas { Width = width, Height = height, Background = background.ToBrush() };
                    canvas.Measure(new Size(width, height));
                    canvas.Arrange(new Rect(0, 0, width, height));

                    var rc = new ShapesRenderContext(canvas);
#if !NET35
                    rc.TextFormattingMode = TextFormattingMode.Ideal;
#endif

                    model.Update(true);
                    model.Render(rc, width, height);

                    canvas.UpdateLayout();

                    var xpsdw = XpsDocument.CreateXpsDocumentWriter(doc);
                    xpsdw.Write(canvas);
                }
            }
        }
        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;
        }
Esempio n. 4
0
      void loader_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
      {
         buff.UpdateLayout();

         Canvas canvas = new Canvas();
         canvas.Children.Add(buff);
         canvas.Width = 512 * 13;
         canvas.Height = 512 * 7;

         canvas.UpdateLayout();

         canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
         canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));
         int Height = ((int)(canvas.ActualHeight));
         int Width = ((int)(canvas.ActualWidth));

         RenderTargetBitmap _RenderTargetBitmap = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
         _RenderTargetBitmap.Render(buff);

         Image img = new Image();
         img.Source = _RenderTargetBitmap;

         Viewer.PanoramaImage = _RenderTargetBitmap;

         Title = "Demo.StreetView, enjoy! ;}";
      }
        public static bool[,] Rasterize(Point[] points, int width, int height)
        {
            Contract.Requires(points != null);
            Contract.Requires(width > 0);
            Contract.Requires(height > 0);
            Contract.Requires(width % 8 == 0);
            Contract.Ensures(Contract.Result<bool[,]>() != null);
            Contract.Ensures(Contract.Result<bool[,]>().GetLength(0) == width);
            Contract.Ensures(Contract.Result<bool[,]>().GetLength(1) == height);

            var canvas = new Canvas { Background = Brushes.White, Width = width, Height = height };
            var polygon = new Polygon { Stroke = Brushes.Black, Fill = Brushes.Black, StrokeThickness = 1, Points = new PointCollection(points) };
            canvas.Children.Add(polygon);
            RenderOptions.SetEdgeMode(canvas, EdgeMode.Aliased);

            canvas.Measure(new Size(width, height));
            canvas.Arrange(new Rect(0, 0, canvas.DesiredSize.Width, canvas.DesiredSize.Height));

            var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
            rtb.Render(canvas);

            var fmb = new FormatConvertedBitmap(rtb, PixelFormats.BlackWhite, null, 0);
            var pixels = new byte[width * height / 8];
            fmb.CopyPixels(pixels, width / 8, 0);

            System.Collections.BitArray ba = new System.Collections.BitArray(pixels);

            var result = new bool[width, height];
            for (int i = 0, y = 0; y < height; ++y)
                for (int x = 0; x < width; ++x, ++i)
                    result[x, y] = !ba[i];

            return result;
        }
 protected override void RenderSample()
 {
     var canvas = new Canvas { Width = 10, Height = 10, SnapsToDevicePixels = true, Background = Brushes.Transparent };
     canvas.Children.Add(new Path
     {
         Stroke = Stroke,
         StrokeThickness = StrokeThickness,
         Fill = Fill,
         Data = new RectangleGeometry(new Rect(0, 0, 10, 10)),
     });
     canvas.Measure(new Size(canvas.Width, canvas.Height));
     canvas.Arrange(new Rect(0, 0, canvas.Width, canvas.Height));
     var dpiX = 96.0;
     var dpiY = 96.0;
     var source = PresentationSource.FromVisual(Application.Current.MainWindow);
     if (source != null && source.CompositionTarget != null)
     {
         var matrix = source.CompositionTarget.TransformToDevice;
         dpiX *= matrix.M11;
         dpiY *= matrix.M22;
     }
     var rtb = new RenderTargetBitmap((int)Math.Round(canvas.Width), (int)Math.Round(canvas.Height), dpiX, dpiY, PixelFormats.Pbgra32);
     rtb.Render(canvas);
     SampleImageSource = rtb;
 }
 public static void Store(IEnumerable<Point> points, int width, int height, string fileName)
 {
     var canvas = new Canvas { Background = Brushes.White };
     canvas.Width = width;
     canvas.Height = height;
     canvas.Children.Add(new Polyline { Stroke = Brushes.Black, StrokeThickness = 1, Points = new PointCollection(points) });
     canvas.Measure(new Size(width, height));
     canvas.Arrange(new Rect(0, 0, canvas.DesiredSize.Width, canvas.DesiredSize.Height));
     RenderOptions.SetEdgeMode(canvas, EdgeMode.Aliased);
     Store(canvas, fileName);
 }
Esempio n. 8
0
        protected void CreateIcon(Floor floor)
        {
            ItemsControl control = new ItemsControl();
            Canvas canvas = new Canvas();
            control.ItemTemplate = Application.Current.FindResource("SegmentRowTemplate") as DataTemplate;
            canvas.Children.Add(control);

            control.ItemsSource = floor.Segments;
            control.UpdateLayout();
            canvas.Measure(new Size(1000, 1000));
            canvas.Arrange(new Rect(new Size(1000, 1000)));

            RenderTargetBitmap bmp = new RenderTargetBitmap((int)control.DesiredSize.Width, (int)control.DesiredSize.Height, 96, 96, PixelFormats.Pbgra32);
            bmp.Render(control);

            floor.Icon = bmp;
        }
Esempio n. 9
0
        public void SaveFile(Canvas canvas, string filename)
        {
            RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)canvas.Width, (int)canvas.Height, 96d, 96d, PixelFormats.Pbgra32);
            // needed otherwise the image output is black
            canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
            canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));

            renderBitmap.Render(canvas);

            //JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

            using (FileStream file = File.Create(filename))
            {
                encoder.Save(file);
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Renders a UI control into an image.
        /// </summary>
        /// <param name="control"></param>
        /// <param name="isWideTile"></param>
        /// <returns></returns>
        public static void CreateImage(UIElement control, string imagePath, int width, int height, SolidColorBrush tileBackgroundColor)
        {
            // 1. Setup dimensions for wide tile.
            var bmp = new WriteableBitmap(width, height);

            // 2. Get the name of the background image based on theme            
            var canvas = new System.Windows.Controls.Canvas();
            canvas.Width = width;
            canvas.Height = height;
            canvas.Background = tileBackgroundColor;

            canvas.Children.Add(control);
            canvas.Measure(new Size(width, height));
            canvas.Arrange(new Rect(0, 0, width, height));
            canvas.UpdateLayout();

            // 4. Now output the control as text.
            bmp.Render(canvas, null);
            bmp.Invalidate();

            // 8. Now save the image to local folder.
            using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                // FileMode.Open, FileAccess.Read, FileShare.Read,
                using (var st = new IsolatedStorageFileStream(imagePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, store))
                {
                    bmp.SaveJpeg(st, width, height, 0, 100);
                    st.Close();
                }
            }

            try
            {

                bmp = null;
                canvas.Children.Clear();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            catch (Exception ex)
            {
                Slate.Core.Logging.Logger.Error("Create image", "Warning, attempt to clear up memory for tile image failed", ex);
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Exports the specified plot model to a stream.
        /// </summary>
        /// <param name="model">The plot model.</param>
        /// <param name="stream">The stream to write to.</param>
        /// <param name="width">The width of the export image.</param>
        /// <param name="height">The height of the exported image.</param>
        /// <param name="background">The background.</param>
        public static void Export(IPlotModel model, Stream stream, double width, double height, OxyColor background)
        {
            var canvas = new Canvas { Width = width, Height = height };
            if (background.IsVisible())
            {
                canvas.Background = background.ToBrush();
            }

            canvas.Measure(new Size(width, height));
            canvas.Arrange(new Rect(0, 0, width, height));

            var rc = new SilverlightRenderContext(canvas);
            model.Update(true);
            model.Render(rc, width, height);

            canvas.UpdateLayout();
            var image = canvas.ToImage();
            image.WriteToStream(stream);
        }
Esempio n. 12
0
        public static RenderTargetBitmap ToBitmap(this System.Windows.Controls.Canvas canvas)
        {
            Size size = new Size(canvas.ActualWidth, canvas.ActualHeight);

            canvas.Measure(size);
            canvas.Arrange(new Rect(size));

            // Create a render bitmap and push the surface to it
            RenderTargetBitmap renderBitmap =
                new RenderTargetBitmap(
                    (int)size.Width,
                    (int)size.Height,
                    96d,
                    96d,
                    PixelFormats.Pbgra32);

            renderBitmap.Render(canvas);

            return(renderBitmap);
        }
Esempio n. 13
0
        public BitmapImage canvastoBitmap(Canvas canvas)
        {
            Size size = new Size(canvas.ActualWidth, canvas.ActualHeight);
            canvas.Measure(size);
            canvas.Arrange(new Rect(size));

            RenderTargetBitmap bitmap = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96d, 96d, PixelFormats.Pbgra32);
            bitmap.Render(canvas);
            BitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bitmap));

            BitmapImage bmp = new BitmapImage() { CacheOption = BitmapCacheOption.OnLoad };
            MemoryStream outStream = new MemoryStream();
            encoder.Save(outStream);
            outStream.Seek(0, SeekOrigin.Begin);
            bmp.BeginInit();
            bmp.StreamSource = outStream;
            bmp.EndInit();
            return bmp;
        }
        public void ExportToPng(Uri path, Canvas surface)
        {
            if (path == null)
                return;

            // Save current canvas transform
            Transform transform = surface.LayoutTransform;
            // reset current transform (in case it is scaled or rotated)
            surface.LayoutTransform = null;

            // Get the size of canvas
            System.Windows.Size size = new System.Windows.Size(surface.Width, surface.Height);
            // Measure and arrange the surface
            // VERY IMPORTANT
            surface.Measure(size);
            surface.Arrange(new Rect(size));

            // Create a render bitmap and push the surface to it
            RenderTargetBitmap renderBitmap =
              new RenderTargetBitmap(
                (int)size.Width,
                (int)size.Height,
                96d,
                96d,
                PixelFormats.Pbgra32);
            renderBitmap.Render(surface);

            // Create a file stream for saving image
            using (FileStream outStream = new FileStream(path.LocalPath, FileMode.Create))
            {
                // Use png encoder for our data
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                // push the rendered bitmap to it
                encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
                // save the data to the stream
                encoder.Save(outStream);
            }

            // Restore previously saved layout
            surface.LayoutTransform = transform;
        }
Esempio n. 15
0
        public void CanvasLayoutTest()
        {
            Canvas panel = new Canvas();

            FrameworkElement child1 = new FrameworkElement { Width = 200, Height = 100 };
            FrameworkElement child2 = new FrameworkElement { Width = 200, Height = 100 };
            FrameworkElement child3 = new FrameworkElement { Width = 200, Height = 100 };
            FrameworkElement child4 = new FrameworkElement { Width = 200, Height = 100 };

            Canvas.SetLeft(child1, 20);
            Canvas.SetTop(child1, 10);
            Canvas.SetRight(child2, 20);
            Canvas.SetTop(child2, 10);
            Canvas.SetRight(child3, 20);
            Canvas.SetBottom(child3, 10);
            Canvas.SetLeft(child4, 20);
            Canvas.SetBottom(child4, 10);

            panel.Children.Add(child1);
            panel.Children.Add(child2);
            panel.Children.Add(child3);
            panel.Children.Add(child4);

            panel.Measure(new Size(1000, 1000));

            Assert.AreEqual(Size.Zero, panel.DesiredSize);

            panel.Arrange(new Rect(1000, 1000));

            Assert.AreEqual(new Size(1000, 1000), panel.VisualSize);

            Assert.AreEqual(new Size(200, 100), child1.VisualSize);
            Assert.AreEqual(new Size(200, 100), child2.VisualSize);
            Assert.AreEqual(new Size(200, 100), child3.VisualSize);
            Assert.AreEqual(new Size(200, 100), child4.VisualSize);

            Assert.AreEqual(new Point(20, 10), child1.VisualOffset);
            Assert.AreEqual(new Point(780, 10), child2.VisualOffset);
            Assert.AreEqual(new Point(780, 890), child3.VisualOffset);
            Assert.AreEqual(new Point(20, 890), child4.VisualOffset);
        }
Esempio n. 16
0
		/// <summary>
		///     Преобразует Xaml-canvas в png изображение
		/// </summary>
		/// <param name="surface">XAML Canvas</param>
		/// <returns>Bitmap, rendered from XAML</returns>
		public static Bitmap XamlCanvasToPngBitmap(Canvas surface) {
			if (surface == null) {
				throw new ArgumentNullException("surface");
			}

			// Save current canvas transform
			var transform = surface.LayoutTransform;
			// reset current transform (in case it is scaled or rotated)
			surface.LayoutTransform = null;

			// Get the size of canvas
			var size = new System.Windows.Size(surface.Width, surface.Height);
			// Measure and arrange the surface
			// VERY IMPORTANT
			surface.Measure(size);
			surface.Arrange(new Rect(size));

			// Create a render bitmap and push the surface to it
			var renderBitmap =
				new RenderTargetBitmap(
					(int)size.Width,
					(int)size.Height,
					96d,
					96d,
					PixelFormats.Pbgra32);
			renderBitmap.Render(surface);

			Bitmap bmp;
			// Create a file stream for saving image
			using (var stream = new MemoryStream()) {
				// Use png encoder for our data
				var encoder = new PngBitmapEncoder();
				// push the rendered bitmap to it
				encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
				// save the data to the stream
				encoder.Save(stream);

				bmp = new Bitmap(stream);
			}
			return bmp;
		}
Esempio n. 17
0
        /// <summary>
        /// Exports the specified plot model to a xml writer.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="writer">The xml writer.</param>
        /// <param name="width">The width.</param>
        /// <param name="height">The height.</param>
        /// <param name="background">The background.</param>
        private static void Export(IPlotModel model, XmlWriter writer, double width, double height, OxyColor background)
        {
            var c = new Canvas();
            if (background.IsVisible())
            {
                c.Background = background.ToBrush();
            }

            c.Measure(new Size(width, height));
            c.Arrange(new Rect(0, 0, width, height));

            var rc = new CanvasRenderContext(c) { UseStreamGeometry = false };

            rc.TextFormattingMode = TextFormattingMode.Ideal;

            model.Update(true);
            model.Render(rc, width, height);

            c.UpdateLayout();

            XamlWriter.Save(c, writer);
        }
Esempio n. 18
0
		public void AttachedTest ()
		{
			Canvas c = new Canvas ();
			Border b = new Border ();
			b.Width = 10;
			b.Height = 33;
			b.Background = new SolidColorBrush (Colors.Orange);
			Canvas.SetTop (b, 88);
			Canvas.SetLeft (b, 150);
			c.Children.Add (b);

			c.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity));
			Assert.AreEqual (new Size (0,0), b.DesiredSize, "b desired");

			c.Arrange (new Rect (0,0,400,400));
			
			Assert.AreEqual (new Rect (0,0,0,0), LayoutInformation.GetLayoutSlot (b));
		}
Esempio n. 19
0
		public void ComputeActualWidth ()
		{
			Canvas c = new Canvas ();

			Assert.AreEqual (new Size (0,0), c.DesiredSize, "c desired");
			Assert.AreEqual (new Size (0,0), new Size (c.ActualWidth,c.ActualHeight), "c actual1");

			c.MaxWidth = 25;
			c.Width = 50;
			c.MinHeight = 33;

			Assert.AreEqual (new Size (0,0), c.DesiredSize, "c desired");
			Assert.AreEqual (new Size (25,33), new Size (c.ActualWidth,c.ActualHeight), "c actual1");
			Assert.AreEqual (new Rect (0,0,0,0), LayoutInformation.GetLayoutSlot (c), "c slot");

			c.Measure (new Size (100, 100));

			Assert.AreEqual (new Size (0,0), c.DesiredSize, "c desired");
			Assert.AreEqual (new Size (25,33), new Size (c.ActualWidth,c.ActualHeight), "c actual2");
			Assert.AreEqual (new Size (0,0), c.RenderSize, "c render");

			c.Arrange (new Rect (0,0,c.DesiredSize.Width,c.DesiredSize.Height));

			Assert.AreEqual (new Size (0,0), c.DesiredSize, "c desired");
			Assert.AreEqual (new Size (25,33), new Size (c.ActualWidth,c.ActualHeight), "c actual3");
			Assert.AreEqual (new Size (0,0), c.RenderSize, "c render");
		}
Esempio n. 20
0
        private static VisualBrush CreateHatchBrush(Styles.Brush brush, int viewbox, int viewport, IEnumerable<Geometry> geometries)
        {
            var elements = new List<UIElement>();
            if (brush.Background != null)
                elements.Add(CreateBackground(brush.Background, viewbox));

            var stroke = new SolidColorBrush(GetColor(brush.Color));
            var canvas = new Canvas();
            foreach (var geometry in geometries)
            {
                canvas.Children.Add(new Path
                {
                    Stroke = stroke,
                    Data = geometry,
                    StrokeThickness = 1,
                    SnapsToDevicePixels = false
                });
            }
            canvas.Arrange(new Rect(0, 0, viewbox, viewbox));
            elements.Add(canvas);
            return CreatePatternVisual(elements, viewport, viewbox);
        }
Esempio n. 21
0
        private static VisualBrush CreatePatternVisual(IEnumerable<UIElement> elements, int viewPort, int viewbox)
        {
            var canvas = new Canvas();
            foreach (var vis in elements)
            {
                canvas.Children.Add(vis);
            }

            var visualBrush = new VisualBrush
            {
                TileMode = TileMode.Tile,
                Viewport = new Rect(0, 0, viewPort, viewPort),
                ViewportUnits = BrushMappingMode.Absolute,
                Viewbox = new Rect(0, 0, viewbox, viewbox),
                ViewboxUnits = BrushMappingMode.Absolute,
                Visual = canvas,
            };
            canvas.Arrange(new Rect(0, 0, viewbox, viewbox));
            return visualBrush;
        }
Esempio n. 22
0
		public static string XamlCanvasToPngBase64(Canvas surface, double width, double height) {
			if (surface == null) {
				throw new ArgumentNullException("surface");
			}
			//Grid newSurface = new Grid();

			//foreach (UIElement child in surface.Children) {
			//	var xaml = System.Windows.Markup.XamlWriter.Save(child);
			//	var deepCopy = System.Windows.Markup.XamlReader.Parse(xaml) as UIElement;
			//	newSurface.Children.Add(deepCopy);
			//}

			// Get the size of canvas
			var size = new Size(width, height);

			// Measure and arrange the surface
			// VERY IMPORTANT
			surface.Measure(size);
			surface.Arrange(new Rect(size));

			double maxWidth = width;
			double maxheight = height;

			foreach (UIElement child in surface.Children)
			{
				if (child.RenderSize.Height > maxheight)
				{
					maxheight = child.RenderSize.Height;
				}
				if (child.RenderSize.Width > maxWidth)
				{
					maxWidth = child.RenderSize.Width;
				}
			}

			// Create a render bitmap and push the surface to it
			var renderBitmap =
				new RenderTargetBitmap(
					(int)maxWidth,
					(int)maxheight,
					96d,
					96d,
					PixelFormats.Pbgra32);
			renderBitmap.Render(surface);

			// Create a file stream for saving image
			using (var stream = new MemoryStream()) {
				// Use png encoder for our data
				var encoder = new PngBitmapEncoder();
				// push the rendered bitmap to it
				encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
				// save the data to the stream
				encoder.Save(stream);

				byte[] imageBytes = stream.ToArray();
				return Convert.ToBase64String(imageBytes);
			}
		}
Esempio n. 23
0
        /// <summary>
        /// Exports the specified plot model to a bitmap.
        /// </summary>
        /// <param name="model">The model to export.</param>
        /// <returns>A bitmap.</returns>
        public BitmapSource ExportToBitmap(IPlotModel model)
        {
            var scale = 96d / this.Resolution;
            var canvas = new Canvas { Width = this.Width * scale, Height = this.Height * scale, Background = this.Background.ToBrush() };
            canvas.Measure(new Size(canvas.Width, canvas.Height));
            canvas.Arrange(new Rect(0, 0, canvas.Width, canvas.Height));

            var rc = new CanvasRenderContext(canvas) { RendersToScreen = false };

            rc.TextFormattingMode = TextFormattingMode.Ideal;

            model.Update(true);
            model.Render(rc, canvas.Width, canvas.Height);

            canvas.UpdateLayout();

            var bmp = new RenderTargetBitmap(this.Width, this.Height, this.Resolution, this.Resolution, PixelFormats.Pbgra32);
            bmp.Render(canvas);
            return bmp;

            // alternative implementation:
            // http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx
            // var dv = new DrawingVisual();
            // using (var ctx = dv.RenderOpen())
            // {
            //    var vb = new VisualBrush(canvas);
            //    ctx.DrawRectangle(vb, null, new Rect(new Point(), new Size(width, height)));
            // }
            // bmp.Render(dv);
        }
Esempio n. 24
0
        //convert canvas object to image
        public void Convert_to_Image(Canvas can, int pane_number)
        {

            if (pane_number == -1)
            {
                //clear hashtable as new plot will overwirte previous image
                Canvas_Obj.Clear();
                Updates.Clear();

                PngBitmapEncoder encoder = new PngBitmapEncoder();
                Canvas_Obj[1] = can;
                Transform transform = can.LayoutTransform;

                // reset current transform incase of scalling or rotating
                  can.LayoutTransform = null;

                // get size of canvas
                Size size = new Size(can.Width, can.Height);

                // measure and arrange the canvas
                can.Measure(size);
                can.Arrange(new Rect(size));

                // create and render surface and push bitmap to it
                RenderTargetBitmap renderBitmap = new RenderTargetBitmap((Int32)size.Width, (Int32)size.Height, 100d, 100d, PixelFormats.Pbgra32);

                // now render surface to bitmap
                renderBitmap.Render(can);

                // puch rendered bitmap into it
                encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

                 //passing encoder to plotreceiver module
                returnEncoderImage(encoder);

                // create image to return
                Image returnImage = new Image();
                // set source of image as frame
                returnImage.Source = encoder.Frames[0];

                // restore previously saved layout
                 can.LayoutTransform = transform;

                //check if the directory exists or not and if not exist create a new one.
                if (!Directory.Exists(imagepath))
                    Directory.CreateDirectory(imagepath);

                // string for saving
                String tempPath = imagepath + "\\image.png";

                // create a file stream for saving image
                using (FileStream outStream = new FileStream(tempPath, FileMode.Create))
                {
                    encoder.Save(outStream);
                }
               


            }
            else
            {
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                int resized_pane_number = 0;

                Canvas resized_canvas = new Canvas();


                //IDictionaryEnumerator entry = Canvas_Obj.GetEnumerator();
                foreach (DictionaryEntry entry in Canvas_Obj)
                {

                    Canvas canvas_value = (Canvas)entry.Value;
                    if (canvas_value.Height != can.Height)
                    {
                        resized_canvas = resize_canvas(canvas_value, pane_number);                        
                        resized_pane_number = FindKey(canvas_value);
                        Updates.Add(resized_pane_number, resized_canvas);
                    }
                }
                foreach (DictionaryEntry upd in Updates)
                {
                    Canvas_Obj[upd.Key] = upd.Value;
                }


                Canvas_Obj[pane_number] = can;
                Canvas cannew = new Canvas();
                cannew = mergePlots();
                


                Transform transform = can.LayoutTransform;

                // reset current transform incase of scalling or rotating
                 can.LayoutTransform = null;

                // get size of canvas
                Size size = new Size(cannew.Width,cannew.Height);

                // measure and arrange the canvas 
                cannew.Measure(size);
                cannew.Arrange(new Rect(size));

                // create and render surface and push bitmap to it
                RenderTargetBitmap renderBitmap = new RenderTargetBitmap((Int32)size.Width, (Int32)size.Height, 100d, 100d, PixelFormats.Pbgra32);

                // now render surface to bitmap
                renderBitmap.Render(cannew);

                // puch rendered bitmap into it
                encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

                //passing encoder to plotreceiver module
                returnEncoderImage(encoder);

                // create image to return
                Image returnImage = new Image();
                // set source of image as frame
                returnImage.Source = encoder.Frames[0];

                // restore previously saved layout
                 can.LayoutTransform = transform;

                //check if the directory exists or not and if not exist create a new one.
                if (!Directory.Exists(imagepath))
                    Directory.CreateDirectory(imagepath);

                // string for saving
                String tempPath = imagepath + "\\image.png";

                // create a file stream for saving image
                using (FileStream outStream = new FileStream(tempPath, FileMode.Create))
                {
                    encoder.Save(outStream);
                }
                


            }


        }
Esempio n. 25
0
        private static void Render(Canvas target, IViewport viewport, IEnumerable<ILayer> layers,
            Color background, bool rasterizing)
        {
            target.BeginInit();

            target.Background = background == null ? null : new XamlMedia.SolidColorBrush {Color = background.ToXaml()};

            target.Visibility = Visibility.Collapsed;

            foreach (var child in target.Children)
            {
                (child as Canvas)?.Children.Clear();
            }

            target.Children.Clear();

            layers = layers.ToList();

            foreach (var layer in layers)
            {
                if (!layer.Enabled) continue;
                if (layer.MinVisible > viewport.Resolution) continue;
                if (layer.MaxVisible < viewport.Resolution) continue;

                RenderLayer(target, viewport, layer, rasterizing);
            }
            target.Arrange(new Rect(0, 0, viewport.Width, viewport.Height));
            target.Visibility = Visibility.Visible;

            if (DeveloperTools.DeveloperMode)
            {
                DrawDebugInfo(target, layers);
            }

            target.EndInit();
        }
Esempio n. 26
0
        // ------------------------- CreateThirdVisual ------------------------
        /// <summary>
        ///   Creates content for the third visual sample.</summary>
        /// <param name="shouldMeasure">
        ///   true to remeasure the layout.</param>
        /// <returns>
        ///   The canvas containing the visual.</returns>
        public Canvas CreateThirdVisual(bool shouldMeasure)
        {
            Canvas canvas = new Canvas();
            RadialGradientBrush brush = new RadialGradientBrush();

            brush.GradientStops.Add(new GradientStop(Colors.Black, 0));
            brush.GradientStops.Add(new GradientStop(Colors.Yellow, 0.5));
            brush.GradientStops.Add(new GradientStop(Colors.Red, 1));

            brush.SpreadMethod = GradientSpreadMethod.Repeat;
            brush.Center = new Point(0.5, 0.5);
            brush.RadiusX = 0.2;
            brush.RadiusY = 0.2;
            brush.GradientOrigin = new Point(0.5, 0.5);

            Rectangle r = new Rectangle();
            r.Fill = brush;

            Thickness thick = new Thickness();
            thick.Left = 100;
            thick.Top = 100;

            r.Margin = thick;
            r.Width = 400;
            r.Height = 400;

            canvas.Children.Add(r);

            LinearGradientBrush linear = new LinearGradientBrush();

            linear.GradientStops.Add(new GradientStop(Colors.Blue, 0));
            linear.GradientStops.Add(new GradientStop(Colors.Yellow, 1));

            linear.SpreadMethod = GradientSpreadMethod.Reflect;
            linear.StartPoint = new Point(0, 0);
            linear.EndPoint = new Point(0.06125, 0);
            linear.Opacity = 0.5;

            r = new Rectangle();
            r.Fill = linear;

            thick = new Thickness();
            thick.Left = 200;
            thick.Top = 200;

            r.Margin = thick;
            r.Width = 400;
            r.Height = 400;

            canvas.Children.Add(r);

            if (shouldMeasure)
            {
                Size sz = new Size(8.5 * 96, 11 * 96);
                canvas.Measure(sz);
                canvas.Arrange(new Rect(new Point(), sz));
                canvas.UpdateLayout();
            }

            return canvas;
        }
Esempio n. 27
0
        public void MergeImages(string fl)
        {
            Canvas canvas = new Canvas();

            if (zoom == 3)
            {
                canvas.Width = 512 * 6.5;
                canvas.Height = 512 * 3.25;
            }
            else if (zoom == 2)
            {
                canvas.Width = 512 * 3.25;
                canvas.Height = 512 * 1.625;
            }

            canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
            canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));
            int Height = ((int)(canvas.ActualHeight));
            int Width = ((int)(canvas.ActualWidth));

            StackPanel mainPanel = new StackPanel();
            mainPanel.Orientation = Orientation.Vertical;

            for (int j = 0; j < limitY; j++)
            {
                StackPanel ph = new StackPanel();
                ph.Orientation = Orientation.Horizontal;
                for (int k = 0; k < limitX; k++)
                {
                    Image stackImg = new Image();
                    stackImg.Source = FromStream(previousJumpBuffStream[j][k]);
                    ph.Children.Add(stackImg);
                }
                mainPanel.Children.Add(ph);
            }

            mainPanel.UpdateLayout();
            canvas.Children.Add(mainPanel);

            canvas.UpdateLayout();

            RenderTargetBitmap _RenderTargetBitmap = new RenderTargetBitmap((int)Width, (int)Height, 96, 96, PixelFormats.Pbgra32);
            _RenderTargetBitmap.Render(mainPanel);

            ImageSource mergedImages = _RenderTargetBitmap;

            SaveImg(mergedImages, fl);

            Stream s = File.OpenRead(fl);
            buffStream.Add(s);
        }
Esempio n. 28
0
        /// <summary>
        /// Exports the specified plot model to a bitmap.
        /// </summary>
        /// <param name="model">The plot model.</param>
        /// <param name="width">The width.</param>
        /// <param name="height">The height.</param>
        /// <param name="background">The background.</param>
        /// <param name="dpi">The resolution.</param>
        /// <returns>A bitmap.</returns>
        public static BitmapSource ExportToBitmap(PlotModel model, int width, int height, OxyColor background = null, int dpi = 96)
        {
            var canvas = new Canvas { Width = width, Height = height, Background = background.ToBrush() };
            canvas.Measure(new Size(width, height));
            canvas.Arrange(new Rect(0, 0, width, height));

            var rc = new ShapesRenderContext(canvas) { RendersToScreen = false };
            model.Update();
            model.Render(rc, width, height);

            canvas.UpdateLayout();

            var bmp = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Pbgra32);
            bmp.Render(canvas);
            return bmp;

            // alternative implementation:
            // http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx
            // var dv = new DrawingVisual();
            // using (var ctx = dv.RenderOpen())
            // {
            //    var vb = new VisualBrush(canvas);
            //    ctx.DrawRectangle(vb, null, new Rect(new Point(), new Size(width, height)));
            // }
            // bmp.Render(dv);
        }
Esempio n. 29
0
		public void CanvasCallsLayoutTest ()
		{
			var parent = new Canvas ();
			LayoutPoker c = new LayoutPoker ();
			parent.Children.Add (c);

			c.Width = 50;
			c.Height = 50;
			
			int measure_called = 0;
			int arrange_called = 0;
			c.Measured += (Size real) => { 
				c.MeasureResult = real; 
				measure_called++;
			};
			c.Arranged += (Size real) => {
				c.ArrangeResult = real;
				arrange_called++;
			};

			parent.Measure (new Size (100, 100));
			Assert.AreEqual (0, arrange_called, "arrange called 0");
			Assert.AreEqual (1, measure_called, "measure called 0");

			Assert.AreEqual (new Size (0,0), c.DesiredSize);
			Assert.AreEqual (new Size (0,0), parent.DesiredSize);

			parent.Arrange (new Rect (0, 0, 100, 100));

			Assert.AreEqual (1, arrange_called, "arrange called 1");
			Assert.AreEqual (1, measure_called, "measure called 1");

			c.InvalidateMeasure ();
			c.InvalidateArrange ();
			parent.InvalidateMeasure ();
			parent.InvalidateArrange ();
			parent.Arrange (new Rect (0, 0, 100, 100));

			Assert.AreEqual (2, arrange_called, "arrange called 2");
			Assert.AreEqual (2, measure_called, "measure called 2");
		}
Esempio n. 30
0
        private void btSaveImage_Click(object sender, RoutedEventArgs e) {

            if (_collector == null)
                return;

            // Create new canvas and renderer
            var cnv = new Canvas() { Margin = cnvChart.Margin, Width = cnvChart.ActualWidth, Height = cnvChart.ActualHeight, Background = System.Windows.Media.Brushes.White };            
            var ch = new ChartRendering.ChartRenderer(cnv, _collector.Datas);
            cnv.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
            cnv.Arrange(new Rect(0, 0, cnv.DesiredSize.Width, cnv.DesiredSize.Height));
            var cwidth = (int)cnv.RenderSize.Width;
            var cheight = (int)(cnv.RenderSize.Height + cnv.Margin.Top * 2);
            var rtb = new RenderTargetBitmap(cwidth, cheight, 96d, 96d, PixelFormats.Default);

            // Generate a white background
            var dv = new DrawingVisual();
            var dvct = dv.RenderOpen();
            dvct.DrawRectangle(System.Windows.Media.Brushes.White, null, new Rect(0, 0, rtb.Width, rtb.Height));
            dvct.Close();
            rtb.Render(dv);

            // Render chart and create Bitmap
            ch.Render(false);
            // Add additional informations overlays            
            AddChartImageInfos(cnv);
            cnv.UpdateLayout();
            rtb.Render(cnv);

            // Open file dialog and save image if OK
            var fd = new SaveFileDialog();
            fd.Filter = "PNG Images|*.png";
            fd.DefaultExt = ".png";
            fd.InitialDirectory = Properties.Settings.Default.fdpath_img;

            if (true == fd.ShowDialog(this)) {
                Properties.Settings.Default.fdpath_img = Path.GetDirectoryName(fd.FileName);
                Properties.Settings.Default.Save();

                var bf = BitmapFrame.Create(rtb);
                var pngEncoder = new PngBitmapEncoder();
                pngEncoder.Frames.Add(bf);                
                using (var st = System.IO.File.OpenWrite(fd.FileName)) {
                    pngEncoder.Save(st);
                }

                var result = MessageBox.Show("Show generated file in Explorer ?", "Image successfully generated", MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (result == MessageBoxResult.Yes)
                    System.Diagnostics.Process.Start("explorer.exe", "/select, " + fd.FileName);
            }
            
        }
Esempio n. 31
0
        private void Test_Click(object sender, RoutedEventArgs e)
        {
            Canvas c = new Canvas();
            ItemsControl control = new ItemsControl();
            var template = uxDataFloor.ItemTemplate;
            control.ItemTemplate = Application.Current.FindResource("SegmentRowTemplate") as DataTemplate;
            control.ItemsSource = _viewModel.CurrentBuilding.Floors[0].Segments;
            c.Children.Add(control);

            c.Measure(new Size(1000, 1000));
            c.Arrange(new Rect(new Size(1000, 1000)));

            RenderTargetBitmap bmp = new RenderTargetBitmap((int)control.DesiredSize.Width, (int)control.DesiredSize.Height, 96, 96, PixelFormats.Pbgra32);
            bmp.Render(control);

            var encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            using (Stream stm = File.Create(@"D:\test.png"))
            {
                encoder.Save(stm);
            }
            return;

            //int width = (int)uxDataFloor.ActualWidth;
            //int height = (int)uxDataFloor.ActualHeight;
            //int width = 1000;
            //int height = 1000;

            //uxDataFloor.Measure(new Size(width, height));
            //uxDataFloor.Arrange(new Rect(uxDataFloor.DesiredSize));

            //RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
            //bmp.Render(uxDataFloor);

            //var encoder = new PngBitmapEncoder();
            //encoder.Frames.Add(BitmapFrame.Create(bmp));
            //using (Stream stm = File.Create(@"D:\test.png"))
            //{
            //    encoder.Save(stm);
            //}
        }
Esempio n. 32
0
        /// <summary>
        /// Creates image from canvas with map background.
        /// </summary>
        /// <param name="mapImage">Map image.</param>
        /// <param name="canvas">Canvas to draw.</param>
        /// <returns>Created image.</returns>
        private Image _CreateImage(MapImage mapImage, SysControls.Canvas canvas)
        {
            Debug.Assert(null != mapImage);
            Debug.Assert(null != canvas);

            Image imageWithData = null;

            RenderTargetBitmap bmp = null;

            SysControls.Canvas outer = null;

            Image sourceImage = null;

            using (MemoryStream sourceStream = new MemoryStream((byte[])mapImage.ImageData))
                sourceImage = Image.FromStream(sourceStream);

            try
            {
                var bitmap = sourceImage as Bitmap;
                Debug.Assert(null != bitmap);
                ImageBrush imageBrush = _CreateImageBrush(bitmap);

                outer = new SysControls.Canvas();

                outer.Width  = mapImage.ImageWidth;
                outer.Height = mapImage.ImageHeight;
                outer.Children.Add(canvas);
                outer.Background = (ImageBrush)imageBrush.GetCurrentValueAsFrozen();
                outer.Arrange(new Rect(0, 0, outer.Width, outer.Height));

                bmp = new RenderTargetBitmap((int)outer.Width,
                                             (int)outer.Height,
                                             mapImage.ImageDPI,
                                             mapImage.ImageDPI,
                                             PixelFormats.Pbgra32);
                bmp.Render(outer);

                var encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(bmp));

                using (MemoryStream stream = new MemoryStream())
                {
                    encoder.Save(stream);
                    imageWithData = Image.FromStream(stream);
                }
            }
            finally
            {   // Clear and dispose all used stuff
                if (outer != null)
                {
                    outer.UpdateLayout();
                    outer.Children.Clear();
                }

                canvas.UpdateLayout();
                foreach (object child in canvas.Children)
                {
                    var symbolControl = child as SymbolControl;
                    if (symbolControl != null)
                    {
                        symbolControl.Template = null;
                    }
                }
                canvas.Children.Clear();

                if (bmp != null)
                {
                    bmp.Clear();
                }

                if (sourceImage != null)
                {
                    sourceImage.Dispose();
                }
            }

            return(imageWithData);
        }