示例#1
0
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs e)
        {
            SKImageInfo info   = e.Info;
            SKCanvas    canvas = e.Surface.Canvas;

            canvas.Clear();
            if (image != null)
            {
                if (kernelSelected)
                {
                    using (SKPaint paint = new SKPaint())
                    {
                        paint.FilterQuality = SKFilterQuality.High;
                        paint.IsAntialias   = false;
                        paint.IsDither      = false;
                        paint.ImageFilter   = SKImageFilter.CreateMatrixConvolution(
                            sizeI, kernel, 1f, 0f, new SKPointI(1, 1),
                            SKMatrixConvolutionTileMode.Clamp, false);

                        canvas.DrawImage(image, info.Rect, ImageStretch.Uniform, paint: paint);
                        image          = e.Surface.Snapshot();
                        kernel         = null;
                        kernelSelected = false;
                    }
                }
                else
                {
                    canvas.DrawImage(image, info.Rect, ImageStretch.Uniform);
                }
            }
        }
示例#2
0
        [Arguments("t.jpg", "t2.jpg")] // SkiaSharp doesn't have TIFF support
        public void SkiaSharp(string input, string output)
        {
            using (var bitmap = SKBitmap.Decode(input))
            {
                bitmap.ExtractSubset(bitmap, SKRectI.Create(100, 100, bitmap.Width - 200, bitmap.Height - 200));

                var targetWidth  = (int)Math.Round(bitmap.Width * .9F);
                var targetHeight = (int)Math.Round(bitmap.Height * .9F);

                // bitmap.Resize(new SKImageInfo(targetWidth, targetHeight), SKBitmapResizeMethod.Triangle)
                // is deprecated, so we use `SKFilterQuality.Low` instead, see:
                // https://github.com/mono/SkiaSharp/blob/1527bf392ebc7b4b57c992ef8bfe14c9899f76a3/binding/Binding/SKBitmap.cs#L24
                using (var resized = bitmap.Resize(new SKImageInfo(targetWidth, targetHeight), SKFilterQuality.Low))
                {
                    using (var surface = SKSurface.Create(new SKImageInfo(targetWidth, targetHeight, bitmap.ColorType,
                                                                          bitmap.AlphaType)))
                        using (var canvas = surface.Canvas)
                            using (var paint = new SKPaint {
                                FilterQuality = SKFilterQuality.High
                            })
                            {
                                var kernel = new[]
                                {
                                    -1f, -1f, -1f,
                                    -1f, 16f, -1f,
                                    -1f, -1f, -1f
                                };
                                var kernelSize   = new SKSizeI(3, 3);
                                var kernelOffset = new SKPointI(1, 1);

                                paint.ImageFilter = SKImageFilter.CreateMatrixConvolution(kernelSize, kernel, 0.125f, 0f,
                                                                                          kernelOffset, SKMatrixConvolutionTileMode.Repeat, false);

                                canvas.DrawBitmap(resized, 0, 0, paint);
                                canvas.Flush();

                                using (var fileStream = File.OpenWrite(output))
                                {
                                    surface.Snapshot()
                                    .Encode(SKEncodedImageFormat.Jpeg, Quality)
                                    .SaveTo(fileStream);
                                }
                            }
                }
            }
        }