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());
                                }
                    }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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) { }
            });
        }
예제 #4
0
        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) { }
            });
        }