Пример #1
0
        static void InvalidateCanvas(string base64, string canvasId, int width, int height)
        {
            if (base64 == null)
            {
                return;
            }

            var data = Convert.FromBase64String(base64);

            var info = new SKImageInfo(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Premul);

            var pixels       = new byte[info.BytesSize];
            var pixelsHandle = GCHandle.Alloc(pixels, GCHandleType.Pinned);

            using (var picture = SKPicture.Deserialize(data))
                using (var surface = SKSurface.Create(info, pixelsHandle.AddrOfPinnedObject(), info.RowBytes))
                {
                    var canvas = surface.Canvas;

                    canvas.DrawPicture(picture);
                }

            Interop.Runtime.InvokeJS($"invalidateCanvas({pixelsHandle.AddrOfPinnedObject()}, \"{canvasId}\", {width}, {height});");

            pixelsHandle.Free();
        }
Пример #2
0
        public void CanSerializeAndDeserializePicture()
        {
            using var recorder = new SKPictureRecorder();
            using var canvas   = recorder.BeginRecording(SKRect.Create(0, 0, 40, 40));
            using var picture  = recorder.EndRecording();

            using var data = picture.Serialize();

            using var deserialized = SKPicture.Deserialize(data);

            Assert.NotNull(deserialized);
        }
Пример #3
0
        public void CanDeserializeFromData()
        {
            using var picture = CreateTestPicture();
            using var data    = picture.Serialize();

            using var bmp = new SKBitmap(40, 40);
            using var cnv = new SKCanvas(bmp);

            using var deserialized = SKPicture.Deserialize(data);
            Assert.Equal(SKRect.Create(0, 0, 40, 40), deserialized.CullRect);
            cnv.DrawPicture(deserialized);

            ValidateTestBitmap(bmp);
        }