public void ToCGImageTest() { if (!TestRuntime.CheckSystemAndSDKVersion(9, 0)) { Assert.Ignore("Ignoring VideoToolbox.VTUtilitiesTests: Requires iOS9+"); } #if MONOMAC var originalImage = new NSImage(NSBundle.MainBundle.PathForResource("Xam", "png", "CoreImage")); #else var originalImage = UIImage.FromBundle("CoreImage/Xam.png"); #endif var originalCGImage = originalImage.CGImage; var pxbuffer = new CVPixelBuffer(originalCGImage.Width, originalCGImage.Height, CVPixelFormatType.CV32ARGB, new CVPixelBufferAttributes { CGImageCompatibility = true, CGBitmapContextCompatibility = true }); #if !__TVOS__ pxbuffer.Lock(CVOptionFlags.None); #else pxbuffer.Lock(CVPixelBufferLock.None); #endif using (var colorSpace = CGColorSpace.CreateDeviceRGB()) using (var ctx = new CGBitmapContext(pxbuffer.BaseAddress, originalCGImage.Width, originalCGImage.Height, 8, 4 * originalCGImage.Width, colorSpace, CGBitmapFlags.NoneSkipLast)) { ctx.RotateCTM(0); ctx.DrawImage(new RectangleF(0, 0, originalCGImage.Width, originalCGImage.Height), originalCGImage); #if !__TVOS__ pxbuffer.Unlock(CVOptionFlags.None); #else pxbuffer.Unlock(CVPixelBufferLock.None); #endif } Assert.NotNull(pxbuffer, "VTUtilitiesTests.ToCGImageTest pxbuffer should not be null"); CGImage newImage; var newImageStatus = pxbuffer.ToCGImage(out newImage); Assert.That(newImageStatus == VTStatus.Ok, "VTUtilitiesTests.ToCGImageTest must be ok"); Assert.NotNull(newImage, "VTUtilitiesTests.ToCGImageTest pxbuffer should not be newImage"); Assert.AreEqual(originalCGImage.Width, newImage.Width, "VTUtilitiesTests.ToCGImageTest"); Assert.AreEqual(originalCGImage.Height, newImage.Height, "VTUtilitiesTests.ToCGImageTest"); var retainCount = CFGetRetainCount(newImage.Handle); Assert.That(retainCount, Is.EqualTo(1), "RetainCount"); }
public void ToCGImageTest() { TestRuntime.AssertSystemVersion(PlatformName.iOS, 9, 0, throwIfOtherPlatform: false); TestRuntime.AssertSystemVersion(PlatformName.MacOSX, 10, 11, throwIfOtherPlatform: false); TestRuntime.AssertSystemVersion(PlatformName.TvOS, 10, 2, throwIfOtherPlatform: false); #if MONOMAC var originalImage = new NSImage(NSBundle.MainBundle.PathForResource("Xam", "png", "CoreImage")); #else var originalImage = UIImage.FromBundle("CoreImage/Xam.png"); #endif var originalCGImage = originalImage.CGImage; var pxbuffer = new CVPixelBuffer(originalCGImage.Width, originalCGImage.Height, CVPixelFormatType.CV32ARGB, new CVPixelBufferAttributes { CGImageCompatibility = true, CGBitmapContextCompatibility = true }); #if !XAMCORE_3_0 pxbuffer.Lock(CVOptionFlags.None); #else pxbuffer.Lock(CVPixelBufferLock.None); #endif using (var colorSpace = CGColorSpace.CreateDeviceRGB()) using (var ctx = new CGBitmapContext(pxbuffer.BaseAddress, originalCGImage.Width, originalCGImage.Height, 8, 4 * originalCGImage.Width, colorSpace, CGBitmapFlags.NoneSkipLast)) { ctx.RotateCTM(0); ctx.DrawImage(new CGRect(0, 0, originalCGImage.Width, originalCGImage.Height), originalCGImage); #if !XAMCORE_3_0 pxbuffer.Unlock(CVOptionFlags.None); #else pxbuffer.Unlock(CVPixelBufferLock.None); #endif } Assert.NotNull(pxbuffer, "VTUtilitiesTests.ToCGImageTest pxbuffer should not be null"); CGImage newImage; var newImageStatus = pxbuffer.ToCGImage(out newImage); Assert.That(newImageStatus == VTStatus.Ok, "VTUtilitiesTests.ToCGImageTest must be ok"); Assert.NotNull(newImage, "VTUtilitiesTests.ToCGImageTest pxbuffer should not be newImage"); Assert.AreEqual(originalCGImage.Width, newImage.Width, "VTUtilitiesTests.ToCGImageTest"); Assert.AreEqual(originalCGImage.Height, newImage.Height, "VTUtilitiesTests.ToCGImageTest"); var retainCount = CFGetRetainCount(newImage.Handle); Assert.That(retainCount, Is.EqualTo(1), "RetainCount"); }