コード例 #1
0
ファイル: MacConversions.cs プロジェクト: philstopford/Eto
        public static NSImage ToNS(this Image image, int?size = null)
        {
            if (image == null)
            {
                return(null);
            }
            var source = image.Handler as IImageSource;

            if (source == null)
            {
                return(null);
            }
            var nsimage = source.GetImage();


            if (size != null)
            {
                var mainScale = Screen.PrimaryScreen.RealScale;
                var scales    = new[] { 1f, 2f };              // generate both retina and non-retina representations
                var sz        = (float)Math.Ceiling(size.Value / mainScale);
                sz = size.Value;
                var imgsize      = image.Size;
                var max          = Math.Max(imgsize.Width, imgsize.Height);
                var newimagesize = new CGSize((nint)(sz * imgsize.Width / max), (nint)(sz * imgsize.Height / max));

                var newimage = new NSImage(newimagesize);
                foreach (var scale in scales)
                {
                    sz = (float)Math.Ceiling(size.Value * scale / mainScale);
                    var rep = nsimage.BestRepresentation(new CGRect(0, 0, sz, sz), null, null);
                    max = (int)Math.Max(rep.PixelsWide, rep.PixelsHigh);
                    sz  = (float)Math.Ceiling(size.Value * scale);
                    if (rep is NSCustomImageRep custom)
                    {
                        rep      = custom.Copy() as NSImageRep;
                        rep.Size = newimagesize;
                        newimage.AddRepresentation(rep);
                    }
                    else
                    {
                        var newsize = new CGSize((nint)(sz * rep.PixelsWide / max), (nint)(sz * rep.PixelsHigh / max));
                        newimage.AddRepresentation(rep.Resize(newsize, imageSize: newimagesize));
                    }
                }
                nsimage = newimage;
            }
            return(nsimage);
        }
コード例 #2
0
        internal static NSImage TakeSnapshot(NSView view, object data)
        {
            NSImage snapshot = null;

            if (data is IDataObject idata)
            {
                if (idata.GetData("DragAndDropImage") is Drawing.Image image)
                {
                    snapshot = image.ToNSImage();
                }
            }

            if (snapshot == null && view is MonoView)
            {
                snapshot = CreateSwatch(new CGSize(32, 22));
            }

            if (snapshot == null)
            {
                var b = view.BitmapImageRepForCachingDisplayInRect(view.Bounds);
                view.CacheDisplay(view.Bounds, b);

                snapshot = new NSImage(view.Bounds.Size);
                snapshot.AddRepresentation(b);
            }
            return(snapshot);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: Conversions.cs プロジェクト: daddycoding/Eto
        public static NSImage ToNS(this Image image, int?size = null)
        {
            if (image == null)
            {
                return(null);
            }
            var source = image.Handler as IImageSource;

            if (source == null)
            {
                return(null);
            }
            var nsimage = source.GetImage();

            if (size != null)
            {
                var rep = nsimage.BestRepresentation(new CGRect(0, 0, size.Value, size.Value), null, null);
                if (rep.PixelsWide > size.Value || rep.PixelsHigh > size.Value)
                {
                    var max     = Math.Max(nsimage.Size.Width, nsimage.Size.Height);
                    var newsize = new CGSize((int)(size.Value * nsimage.Size.Width / max), (int)(size.Value * nsimage.Size.Height / max));
                    nsimage = nsimage.Resize(newsize);
                }
                else
                {
                    nsimage = new NSImage();
                    nsimage.AddRepresentation(rep);
                }
            }
            return(nsimage);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public object Create(IconFrame frame, Func <Stream> load)
        {
            var img = new NSImage();

            img.AddRepresentation(new LazyImageRep {
                Load = load
            });
            return(new Bitmap(new BitmapHandler(img)));
        }
コード例 #7
0
        public override object CreateImage(object backend)
        {
            var gc        = (CGContextBackend)backend;
            var img       = new NSImage(((CGBitmapContext)gc.Context).ToImage(), gc.Size);
            var imageData = img.AsTiff();
            var imageRep  = (NSBitmapImageRep)NSBitmapImageRep.ImageRepFromData(imageData);
            var im        = new NSImage();

            im.AddRepresentation(imageRep);
            return(im);
        }
コード例 #8
0
 void SetIcon(Icon icon)
 {
     using (var stream = icon.GetStream())
     {
         // Fun song and dance to avoid using the default 256/256 rep
         var icn = NSImage.FromStream(stream).BestRepresentation(new CGRect(0, 0, 32, 32), null, null);
         icn.Size = new CGSize(24, 24);
         var image = new NSImage(icn.Size);
         image.AddRepresentation(icn);
         image.Template = true;
         _item.Image    = image;
     }
 }
コード例 #9
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);
         }
     }
 }
コード例 #10
0
ファイル: NSImageExtensions.cs プロジェクト: pcdummy/Eto
        public static NSImage Tint(this NSImage image, NSColor tint)
        {
            CIFilter colorGenerator = CIFilter.FromName("CIConstantColorGenerator");
            CIColor  color          = CIColor.FromCGColor(tint.ToCG());

            colorGenerator.SetValueForKey(color, CIFilterInputKey.Color);
            CIFilter colorFilter = CIFilter.FromName("CIColorControls");

            colorFilter.SetValueForKey(colorGenerator.ValueForKey(CIFilterOutputKey.Image), CIFilterInputKey.Image);
            colorFilter.SetValueForKey(NSNumber.FromFloat(3f), CIFilterInputKey.Saturation);
            colorFilter.SetValueForKey(NSNumber.FromFloat(0.35f), CIFilterInputKey.Brightness);
            colorFilter.SetValueForKey(NSNumber.FromFloat(1f), CIFilterInputKey.Contrast);

            CIFilter monochromeFilter = CIFilter.FromName("CIColorMonochrome");
            CIImage  baseImage        = CIImage.FromCGImage(image.CGImage);

            monochromeFilter.SetValueForKey(baseImage, CIFilterInputKey.Image);
            monochromeFilter.SetValueForKey(CIColor.FromRgb(0.75f, 0.75f, 0.75f), CIFilterInputKey.Color);
            monochromeFilter.SetValueForKey(NSNumber.FromFloat(1f), CIFilterInputKey.Intensity);

            CIFilter compositingFilter = CIFilter.FromName("CIMultiplyCompositing");

            compositingFilter.SetValueForKey(colorFilter.ValueForKey(CIFilterOutputKey.Image), CIFilterInputKey.Image);
            compositingFilter.SetValueForKey(monochromeFilter.ValueForKey(CIFilterOutputKey.Image), CIFilterInputKey.BackgroundImage);

            CIImage outputImage = (CIImage)compositingFilter.ValueForKey(CIFilterOutputKey.Image);
            var     extent      = outputImage.Extent;

            var newsize = sd.Size.Truncate(extent.Size);

            var tintedImage = new NSImage(newsize);
            var newrep      = new NSBitmapImageRep(IntPtr.Zero, newsize.Width, newsize.Height, 8, 4, true, false, NSColorSpace.DeviceRGB, 4 * newsize.Width, 32);

            tintedImage.AddRepresentation(newrep);

            var graphics = NSGraphicsContext.FromBitmap(newrep);

            NSGraphicsContext.GlobalSaveGraphicsState();
            NSGraphicsContext.CurrentContext = graphics;

            var ciContext = CIContext.FromContext(graphics.GraphicsPort, new CIContextOptions {
                UseSoftwareRenderer = true
            });

            ciContext.DrawImage(outputImage, extent, extent);

            NSGraphicsContext.GlobalRestoreGraphicsState();

            newrep.Size = image.Size;
            return(tintedImage);
        }
コード例 #11
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);
        }
コード例 #12
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);
             }
 }
コード例 #13
0
ファイル: MacEngine.cs プロジェクト: TelsaV/xwt
        public override object RenderWidget(Widget w)
        {
            var view = ((ViewBackend)w.GetBackend()).Widget;

            view.LockFocus();
            var img       = new NSImage(view.DataWithPdfInsideRect(view.Bounds));
            var imageData = img.AsTiff();
            var imageRep  = (NSBitmapImageRep)NSBitmapImageRep.ImageRepFromData(imageData);
            var im        = new NSImage();

            im.AddRepresentation(imageRep);
            im.Size = new CGSize((nfloat)view.Bounds.Width, (nfloat)view.Bounds.Height);
            return(im);
        }
コード例 #14
0
 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);
             }
 }
コード例 #15
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);
             */
        }
コード例 #16
0
        /// <summary>
        /// Render a GTK widget to an AppKit NSImage
        /// </summary>
        public static NSImage RenderGtkWidget(Gtk.Widget widget)
        {
            var nativeView = GetNSView(widget);

            widget.TranslateCoordinates(widget.Toplevel, widget.Allocation.X, widget.Allocation.Y, out int transX, out int transY);
            var rect = new CoreGraphics.CGRect(transX, transY, widget.Allocation.Width, widget.Allocation.Height);

            var imageRep = nativeView.BitmapImageRepForCachingDisplayInRect(rect);

            nativeView.CacheDisplay(rect, imageRep);

            var image = new NSImage(rect.Size);

            image.AddRepresentation(imageRep);
            return(image);
        }
コード例 #17
0
ファイル: NSImageExtensions.cs プロジェクト: wnf0000/Eto
        public static NSImage Resize(this NSImage image, CGSize newsize, ImageInterpolation interpolation = ImageInterpolation.Default)
        {
            var newimage = new NSImage(newsize);
            var newrep   = new NSBitmapImageRep(IntPtr.Zero, (nint)newsize.Width, (nint)newsize.Height, 8, 4, true, false, NSColorSpace.DeviceRGB, 4 * (nint)newsize.Width, 32);

            newimage.AddRepresentation(newrep);

            var graphics = NSGraphicsContext.FromBitmap(newrep);

            NSGraphicsContext.GlobalSaveGraphicsState();
            NSGraphicsContext.CurrentContext           = graphics;
            graphics.GraphicsPort.InterpolationQuality = interpolation.ToCG();
            image.DrawInRect(new CGRect(CGPoint.Empty, newimage.Size), new CGRect(CGPoint.Empty, image.Size), NSCompositingOperation.SourceOver, 1f);
            NSGraphicsContext.GlobalRestoreGraphicsState();
            return(newimage);
        }
コード例 #18
0
ファイル: ImageHandler.cs プロジェクト: inorton/xwt
        public override object ConvertToBitmap(object handle, int pixelWidth, int pixelHeight, ImageFormat format)
        {
            if (handle is CustomImage)
            {
                var flags = CGBitmapFlags.ByteOrderDefault;
                int bytesPerRow;
                switch (format)
                {
                case ImageFormat.ARGB32:
                    bytesPerRow = pixelWidth * 4;
                    flags      |= CGBitmapFlags.PremultipliedFirst;
                    break;

                case ImageFormat.RGB24:
                    bytesPerRow = pixelWidth * 3;
                    flags      |= CGBitmapFlags.None;
                    break;

                default:
                    throw new NotImplementedException("ImageFormat: " + format.ToString());
                }

                var bmp = new CGBitmapContext(IntPtr.Zero, pixelWidth, pixelHeight, 8, bytesPerRow, Util.DeviceRGBColorSpace, flags);
                bmp.TranslateCTM(0, pixelHeight);
                bmp.ScaleCTM(1, -1);

                var ctx = new CGContextBackend {
                    Context = bmp,
                    Size    = new SizeF(pixelWidth, pixelHeight),
                    InverseViewTransform = bmp.GetCTM().Invert()
                };

                var ci = (CustomImage)handle;
                ci.DrawInContext(ctx);

                var img       = new NSImage(((CGBitmapContext)bmp).ToImage(), new SizeF(pixelWidth, pixelHeight));
                var imageData = img.AsTiff();
                var imageRep  = (NSBitmapImageRep)NSBitmapImageRep.ImageRepFromData(imageData);
                var im        = new NSImage();
                im.AddRepresentation(imageRep);
                return(im);
            }
            else
            {
                return(handle);
            }
        }
コード例 #19
0
 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;
                 }
     }));
 }
コード例 #20
0
        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;
        }
コード例 #21
0
        public void Badge()
        {
            using (NSAutoreleasePool a = new NSAutoreleasePool()) {
                foreach (string path in this.paths)
                {
                    string  extension = Path.GetExtension(path.ToLower());
                    NSImage new_icon  = new NSImage();

                    if (!this.icons.ContainsKey(extension))
                    {
                        foreach (int size in this.sizes)
                        {
                            NSImage file_icon = NSWorkspace.SharedWorkspace.IconForFileType(extension);
                            file_icon.Size = new SizeF(size, size);

                            // TODO: replace this with the sync icon
                            NSImage overlay_icon = NSWorkspace.SharedWorkspace.IconForFileType("sln");
                            overlay_icon.Size = new SizeF(size / 2, size / 2);

                            file_icon.LockFocus();
                            NSGraphicsContext.CurrentContext.ImageInterpolation = NSImageInterpolation.High;
                            overlay_icon.Draw(
                                new RectangleF(0, 0, file_icon.Size.Width / 3, file_icon.Size.Width / 3),
                                new RectangleF(), NSCompositingOperation.SourceOver, 1.0f);
                            file_icon.UnlockFocus();

                            new_icon.AddRepresentation(file_icon.Representations() [0]);
                        }


                        this.icons.Add(extension, new_icon);
                    }
                    else
                    {
                        new_icon = this.icons [extension];
                    }

                    NSWorkspace.SharedWorkspace.SetIconforFile(new_icon, path, 0);
                }
            }
        }
コード例 #22
0
        public override object ConvertToBitmap(ImageDescription idesc, double scaleFactor, ImageFormat format)
        {
            double width       = idesc.Size.Width;
            double height      = idesc.Size.Height;
            int    pixelWidth  = (int)(width * scaleFactor);
            int    pixelHeight = (int)(height * scaleFactor);

            if (idesc.Backend is CustomImage)
            {
                var flags = CGBitmapFlags.ByteOrderDefault;
                int bytesPerRow;
                switch (format)
                {
                case ImageFormat.ARGB32:
                    bytesPerRow = pixelWidth * 4;
                    flags      |= CGBitmapFlags.PremultipliedFirst;
                    break;

                case ImageFormat.RGB24:
                    bytesPerRow = pixelWidth * 3;
                    flags      |= CGBitmapFlags.None;
                    break;

                default:
                    throw new NotImplementedException("ImageFormat: " + format.ToString());
                }

                var bmp = new CGBitmapContext(IntPtr.Zero, pixelWidth, pixelHeight, 8, bytesPerRow, Util.DeviceRGBColorSpace, flags);
                bmp.TranslateCTM(0, pixelHeight);
                bmp.ScaleCTM((float)scaleFactor, (float)-scaleFactor);

                var ctx = new CGContextBackend {
                    Context = bmp,
                    Size    = new CGSize((nfloat)width, (nfloat)height),
                    InverseViewTransform = bmp.GetCTM().Invert(),
                    ScaleFactor          = scaleFactor
                };

                var ci = (CustomImage)idesc.Backend;
                ci.DrawInContext(ctx, idesc);

                var img       = new NSImage(((CGBitmapContext)bmp).ToImage(), new CGSize(pixelWidth, pixelHeight));
                var imageData = img.AsTiff();
                var imageRep  = (NSBitmapImageRep)NSBitmapImageRep.ImageRepFromData(imageData);
                var im        = new NSImage();
                im.AddRepresentation(imageRep);
                im.Size = new CGSize((nfloat)width, (nfloat)height);
                bmp.Dispose();
                return(im);
            }
            else
            {
                NSImage          img    = (NSImage)idesc.Backend;
                NSBitmapImageRep bitmap = img.Representations().OfType <NSBitmapImageRep> ().FirstOrDefault();
                if (bitmap == null)
                {
                    var imageData = img.AsTiff();
                    var imageRep  = (NSBitmapImageRep)NSBitmapImageRep.ImageRepFromData(imageData);
                    var im        = new NSImage();
                    im.AddRepresentation(imageRep);
                    im.Size = new CGSize((nfloat)width, (nfloat)height);
                    return(im);
                }
                return(idesc.Backend);
            }
        }
コード例 #23
0
ファイル: MyDocument.cs プロジェクト: RangoLee/mac-samples
		partial void AddFrame (NSButton 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;			
		}