public byte[] ResizeTo(byte[] sourceImageData, int size) { using (var ms = new MemoryStream(sourceImageData)) using (var inputStream = new SKManagedStream(ms, false)) using (var codec = SKCodec.Create(inputStream)) { var sourceBitmap = SKBitmap.Decode(codec); if (codec.EncodedOrigin != SKEncodedOrigin.TopLeft) { sourceBitmap = RotateAndFlip(sourceBitmap, codec.EncodedOrigin); } var sourceSize = Math.Max(sourceBitmap.Width, sourceBitmap.Height); var ratio = size / (double)sourceSize; using (var targetBitmap = new SKBitmap(new SKImageInfo((int)(sourceBitmap.Width * ratio), (int)(sourceBitmap.Height * ratio)))) using (var targetMemoryStream = new MemoryStream()) using (var thumbnailStream = new SKManagedWStream(targetMemoryStream)) { sourceBitmap.ScalePixels(targetBitmap, SKFilterQuality.High); SKPixmap.Encode(thumbnailStream, targetBitmap, SKEncodedImageFormat.Jpeg, 85); thumbnailStream.Flush(); sourceBitmap.Dispose(); return(targetMemoryStream.ToArray()); } } }
public void SvgCanvasCreatesValidDrawing() { using (var stream = new MemoryStream()) { // draw the SVG using (var skStream = new SKManagedWStream(stream, false)) using (var writer = new SKXmlStreamWriter(skStream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(200, 150), writer)) { var rectPaint = new SKPaint { Color = SKColors.Blue, Style = SKPaintStyle.Fill }; canvas.DrawRect(SKRect.Create(50, 70, 100, 30), rectPaint); var circlePaint = new SKPaint { Color = SKColors.Red, Style = SKPaintStyle.Fill }; canvas.DrawOval(SKRect.Create(50, 70, 100, 30), circlePaint); skStream.Flush(); } // reset the sream stream.Position = 0; // read the SVG var xdoc = XDocument.Load(stream); var svg = xdoc.Root; var ns = (XNamespace)"http://www.w3.org/2000/svg"; Assert.Equal(ns, svg.GetDefaultNamespace()); Assert.Equal("200", svg.Attribute("width").Value); Assert.Equal("150", svg.Attribute("height").Value); var rect = svg.Element(ns + "rect"); Assert.Equal("rgb(0,0,255)", rect.Attribute("fill").Value); Assert.Equal("50", rect.Attribute("x").Value); Assert.Equal("70", rect.Attribute("y").Value); Assert.Equal("100", rect.Attribute("width").Value); Assert.Equal("30", rect.Attribute("height").Value); var ellipse = svg.Element(ns + "ellipse"); Assert.Equal("rgb(255,0,0)", ellipse.Attribute("fill").Value); Assert.Equal("100", ellipse.Attribute("cx").Value); Assert.Equal("85", ellipse.Attribute("cy").Value); Assert.Equal("50", ellipse.Attribute("rx").Value); Assert.Equal("15", ellipse.Attribute("ry").Value); } }
private void UpdateSvg() { bool exportPresenter = _previewWindow.svgExport.IsChecked == true; bool showPrintable = _previewWindow.svgPrintable.IsChecked == true; Task.Factory.StartNew(() => { try { IImageCache ic = _projectEditor.Project; var container = _projectEditor.Project.CurrentContainer; var renderer = new SkiaSharpRenderer(true, 96.0); if (!showPrintable) { renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; } renderer.State.ImageCache = _projectEditor.Project; var presenter = exportPresenter ? (ContainerPresenter) new ExportPresenter() : (ContainerPresenter) new EditorPresenter(); using (var ms = new MemoryStream()) { using (var stream = new SKManagedWStream(ms)) { using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer)) { presenter.Render(canvas, renderer, container, 0, 0); } stream.Flush(); } var svg = Encoding.ASCII.GetString(ms.GetBuffer(), 0, (int)ms.Length); Dispatcher.Invoke(() => { _previewWindow.svgText.Text = svg; }); } } catch (Exception) { } }); }
private void UpdateSvg() { bool exportPresenter = _previewWindow.svgExport.IsChecked == true; bool showPrintable = _previewWindow.svgPrintable.IsChecked == true; Task.Factory.StartNew(() => { try { IImageCache ic = _projectEditor.Project; var container = _projectEditor.Project.CurrentContainer; var renderer = new SkiaRenderer(true, 96.0); if (!showPrintable) { renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; } renderer.State.ImageCache = _projectEditor.Project; var presenter = exportPresenter ? (ContainerPresenter)new ExportPresenter() : (ContainerPresenter)new EditorPresenter(); using (var ms = new MemoryStream()) { using (var stream = new SKManagedWStream(ms)) { using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer)) { presenter.Render(canvas, renderer, container, 0, 0); } stream.Flush(); } var svg = Encoding.ASCII.GetString(ms.GetBuffer(), 0, (int)ms.Length); Dispatcher.Invoke(() => { _previewWindow.svgText.Text = svg; }); } } catch (Exception) { } }); }