Beispiel #1
0
        public void ReleaseImagePixelsWasInvoked()
        {
            bool released = false;

            var onRelease = new SKImageRasterReleaseDelegate((addr, ctx) => {
                Marshal.FreeCoTaskMem(addr);
                released = true;
                Assert.Equal("RELEASING!", ctx);
            });

            var info   = new SKImageInfo(1, 1);
            var pixels = Marshal.AllocCoTaskMem(info.BytesSize);

            using (var pixmap = new SKPixmap(info, pixels))
                using (var image = SKImage.FromPixels(pixmap, onRelease, "RELEASING!"))
                {
                    Assert.False(image.IsTextureBacked);
                    using (var raster = image.ToRasterImage())
                    {
                        Assert.Equal(image, raster);
                    }
                    Assert.False(released, "The SKImageRasterReleaseDelegate was called too soon.");
                }

            Assert.True(released, "The SKImageRasterReleaseDelegate was not called.");
        }
Beispiel #2
0
        public static SKImage FromPixels(SKPixmap pixmap, SKImageRasterReleaseDelegate releaseProc, object releaseContext)
        {
            if (pixmap == null)
            {
                throw new ArgumentNullException(nameof(pixmap));
            }

            var del = releaseProc != null && releaseContext != null
                                ? new SKImageRasterReleaseDelegate((addr, _) => releaseProc(addr, releaseContext))
                                : releaseProc;
            var proxy = DelegateProxies.Create(del, DelegateProxies.SKImageRasterReleaseDelegateProxy, out _, out var ctx);

            return(GetObject <SKImage> (SkiaApi.sk_image_new_raster(pixmap.Handle, proxy, (void *)ctx)));
        }
Beispiel #3
0
        public static SKImage FromPixels(SKPixmap pixmap, SKImageRasterReleaseDelegate releaseProc, object releaseContext)
        {
            if (pixmap == null)
            {
                throw new ArgumentNullException(nameof(pixmap));
            }

            if (releaseProc == null)
            {
                return(GetObject <SKImage> (SkiaApi.sk_image_new_raster(pixmap.Handle, IntPtr.Zero, IntPtr.Zero)));
            }
            else
            {
                var ctx = new NativeDelegateContext(releaseContext, releaseProc);
                return(GetObject <SKImage> (SkiaApi.sk_image_new_raster(pixmap.Handle, rasterReleaseDelegate, ctx.NativeContext)));
            }
        }
Beispiel #4
0
 public static SKImage FromPixels(SKPixmap pixmap, SKImageRasterReleaseDelegate releaseProc)
 {
     return(FromPixels(pixmap, releaseProc, null));
 }