public static NSImage ToNSImage(this CMSampleBuffer sampleBuffer)
        {
            NSImage image;

            using (CVPixelBuffer pixelBuffer = sampleBuffer.GetImageBuffer() as CVPixelBuffer)
            {
                // Lock the base address
                pixelBuffer.Lock(CVPixelBufferLock.ReadOnly);
                using (CIImage cIImage = new CIImage(pixelBuffer))
                {
                    image = null;

                    AutoResetEvent e = new AutoResetEvent(false);
                    Xamarin.Forms.Device.BeginInvokeOnMainThread(delegate
                    {
                        NSCIImageRep rep = new NSCIImageRep(cIImage);
                        image            = new NSImage(rep.Size);
                        image.AddRepresentation(rep);
                        e.Set();
                    });
                    e.WaitOne();
                }
                pixelBuffer.Unlock(CVPixelBufferLock.ReadOnly);
            }
            return(image);
        }
        public static NSImage ToNSImage(this CIImage image, System.Drawing.SizeF size)
        {
            var imageRep = NSCIImageRep.FromCIImage(image);
            var nsImage  = new NSImage(size);

            nsImage.AddRepresentation(imageRep);

            return(nsImage);
        }
Esempio n. 3
0
 public static NSImage ToFilter(NSImage source, CIFilter filter)
 {
     using (var inputImage = CIImage.FromCGImage(source.CGImage))
     {
         filter.Image = inputImage;
         using (var resultImage = new NSCIImageRep(filter.OutputImage))
         {
             var nsImage = new NSImage(resultImage.Size);
             nsImage.AddRepresentation(resultImage);
             return(nsImage);
         }
     }
 }
Esempio n. 4
0
        NSImage ImageFromSampleBuffer(CMSampleBuffer sampleBuffer)
#endif
        {
#if __IOS__
            UIImage image;
#else
            NSImage image;
#endif

            Random r    = new Random();
            int    flag = r.Next();
            // Get the CoreVideo image
            using (CVPixelBuffer pixelBuffer = sampleBuffer.GetImageBuffer() as CVPixelBuffer)
            {
                // Lock the base address
                pixelBuffer.Lock(CVPixelBufferLock.ReadOnly);
                using (CIImage cIImage = new CIImage(pixelBuffer))
                {
#if __IOS__
                    image = new UIImage(cIImage);
#else
                    image = null;

                    AutoResetEvent e = new AutoResetEvent(false);
                    //e.WaitOne();

                    //Semaphore s = new Semaphore(1, 1);
                    //s.WaitOne();
                    BeginInvokeOnMainThread(delegate
                    {
                        NSCIImageRep rep = new NSCIImageRep(cIImage);
                        Debug.WriteLine(String.Format("({2}) NSCIImageRep: {0}x{1}", rep.Size.Width, rep.Size.Height, flag));
                        image = new NSImage(rep.Size);
                        image.AddRepresentation(rep);
                        //s.Release();
                        //Monitor.Exit(this);
                        Debug.WriteLine(String.Format("({2}) NSImage: {0}x{1}", image.Size.Width, image.Size.Height, flag));
                        e.Set();
                    });
                    e.WaitOne();
                    //Monitor.Enter(this);
                    //Monitor.Exit(this);
                    //s.WaitOne();
                    //s.Release();
#endif
                }
                pixelBuffer.Unlock(CVPixelBufferLock.ReadOnly);
            }
            Debug.WriteLine(String.Format("({2}) Received NSImage: {0}x{1}", image.Size.Width, image.Size.Height, flag));
            return(image);
        }
Esempio n. 5
0
 public static NSImage ToSepia(NSImage source)
 {
     using (var inputImage = CIImage.FromCGImage(source.CGImage))
         using (var filter = new CISepiaTone()
         {
             Image = inputImage
         })
             using (var resultImage = new NSCIImageRep(filter.OutputImage))
             {
                 var nsImage = new NSImage(resultImage.Size);
                 nsImage.AddRepresentation(resultImage);
                 return(nsImage);
             }
 }
 public static NSImage ToBlurred(NSImage source, float rad)
 {
     using (var inputImage = CIImage.FromCGImage(source.CGImage))
         using (var filter = new CIGaussianBlur()
         {
             Image = inputImage, Radius = rad
         })
             using (var resultImage = new NSCIImageRep(filter.OutputImage))
             {
                 var nsImage = new NSImage(resultImage.Size);
                 nsImage.AddRepresentation(resultImage);
                 return(nsImage);
             }
 }
Esempio n. 7
0
        public static void Colourize(NSView control, Color color, Action drawAction)
        {
            var size  = control.Frame.Size;
            var image = new NSImage(size);

            image.LockFocusFlipped(control.IsFlipped);
            drawAction();
            image.UnlockFocus();

            var ciImage = CIImage.FromData(image.AsTiff());

            if (control.IsFlipped)
            {
                var realSize        = control.ConvertSizeToBase(size);
                var affineTransform = new NSAffineTransform();
                affineTransform.Translate(0, realSize.Height);
                affineTransform.Scale(1, -1);
                var filter1 = CIFilter.FromName("CIAffineTransform");
                filter1.SetValueForKey(ciImage, CIInputImage);
                filter1.SetValueForKey(affineTransform, CIInputTransform);
                ciImage = filter1.ValueForKey(CIOutputImage) as CIImage;
            }

            var filter2 = CIFilter.FromName("CIColorControls");

            filter2.SetDefaults();
            filter2.SetValueForKey(ciImage, CIInputImage);
            filter2.SetValueForKey(new NSNumber(0.0f), CIInputSaturation);
            ciImage = filter2.ValueForKey(CIOutputImage) as CIImage;

            var filter3 = CIFilter.FromName("CIColorMatrix");

            filter3.SetDefaults();
            filter3.SetValueForKey(ciImage, CIInputImage);
            filter3.SetValueForKey(new CIVector(0, color.R, 0), CIInputRVector);
            filter3.SetValueForKey(new CIVector(color.G, 0, 0), CIInputGVector);
            filter3.SetValueForKey(new CIVector(0, 0, color.B), CIInputBVector);
            ciImage = filter3.ValueForKey(CIOutputImage) as CIImage;

            image = new NSImage(size);
            var rep = NSCIImageRep.FromCIImage(ciImage);

            image.AddRepresentation(rep);
            image.Draw(SD.PointF.Empty, new SD.RectangleF(SD.PointF.Empty, size), NSCompositingOperation.SourceOver, 1);

            /* Use this when implemented in maccore:
             * ciImage.Draw (SD.PointF.Empty, new SD.RectangleF (SD.PointF.Empty, size), NSCompositingOperation.SourceOver, 1);
             */
        }
 protected override NSImage Transform(NSImage sourceBitmap, string path, Work.ImageSource source, bool isPlaceholder, string key)
 {
     return(Helpers.MainThreadDispatcher.PostForResult <NSImage>(() =>
     {
         using (var inputImage = CIImage.FromCGImage(sourceBitmap.CGImage))
             using (var filter = new CIPhotoEffectMono()
             {
                 Image = inputImage
             })
                 using (var resultImage = new NSCIImageRep(filter.OutputImage))
                 {
                     var nsImage = new NSImage(resultImage.Size);
                     nsImage.AddRepresentation(resultImage);
                     return nsImage;
                 }
     }));
 }
        partial void addFrame(NSObject sender)
        {
            NSImage image;

            lock (this){
                if (currentImage == null)
                {
                    return;
                }

                var img = CIImage.FromImageBuffer(currentImage);
                Console.WriteLine(img);
                var imageRep = NSCIImageRep.FromCIImage(CIImage.FromImageBuffer(currentImage));
                image = new NSImage(imageRep.Size);
                image.AddRepresentation(imageRep);
            }
            movie.AddImage(image, new QTTime(1, 10), attrs);
            movie.CurrentTime      = movie.Duration;
            movieView.NeedsDisplay = true;
        }