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(); }
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); }
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); }