Пример #1
0
        public static UIImage FilteredImage(UIImage image)
        {
            var progress = NSProgress.FromTotalUnitCount(-1);

            progress.Cancellable = false;
            progress.Pausable    = false;

            UIImage outputImage;

            var filter = new CIPhotoEffectTransfer();

            var cgImage = image.CGImage;
            var ciImage = CIImage.FromCGImage(cgImage);

            filter.SetValueForKey(ciImage, new NSString("inputImage"));
            var outputCIImage = filter.OutputImage;
            var ciContext     = CIContext.Create();
            var outputCGImage = ciContext.CreateCGImage(outputCIImage, outputCIImage.Extent);

            outputImage = UIImage.FromImage(outputCGImage);

            outputCGImage.Dispose();
            ciContext.Dispose();
            outputCIImage.Dispose();
            ciImage.Dispose();
            cgImage.Dispose();
            filter.Dispose();

            progress.CompletedUnitCount = 1;
            progress.TotalUnitCount     = 1;

            return(outputImage);
        }
Пример #2
0
        public void CommonApplicationDidFinishLaunching(Action completionHandler)
        {
            Scene.ShowsStatistics = true;
            Scene.BackgroundColor = AppKit.NSColor.Black;

            NSProgress progress = NSProgress.FromTotalUnitCount(10);

            DispatchQueue queue = DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default);

            queue.DispatchSync(() => {
                progress.BecomeCurrent(2);
                var ui = new InGameScene(Scene.Bounds.Size);

                DispatchQueue.MainQueue.DispatchAsync(() =>
                                                      Scene.OverlayScene = ui
                                                      );

                progress.ResignCurrent();
                progress.BecomeCurrent(3);

                GameSimulation gameSim = GameSimulation.Sim;
                gameSim.GameUIScene    = ui;

                progress.ResignCurrent();
                progress.BecomeCurrent(3);

                SCNTransaction.Flush();

                // Preload
                Scene.Prepare(gameSim, new Func <bool> (() =>
                                                        true
                                                        ));
                progress.ResignCurrent();
                progress.BecomeCurrent(1);

                // Game Play Specific Code
                gameSim.GameUIScene.GameStateDelegate = gameSim.GameLevel;
                gameSim.GameLevel.ResetLevel();
                gameSim.SetGameState(GameState.PreGame);

                progress.ResignCurrent();
                progress.BecomeCurrent(1);

                DispatchQueue.MainQueue.DispatchAsync(() => {
                    Scene.Scene = gameSim;
                    Scene.WeakSceneRendererDelegate = gameSim;

                    if (completionHandler != null)
                    {
                        completionHandler();
                    }
                });

                progress.ResignCurrent();
            });
        }
Пример #3
0
        private NSProgress SlowImageTransfer(ItemProviderDataCompletionHandler completionHandler)
        {
            var progress      = NSProgress.FromTotalUnitCount(100);
            var loadStartDate = new NSDate();

            DispatchQueue.MainQueue.DispatchAsync(() => {
                progress.BecomeCurrent(100);
                NSTimer.CreateScheduledTimer(0.033f, true, (timer) => {
                    progress.CompletedUnitCount = CompletedUnitCount(loadStartDate);
                    if (progress.CompletedUnitCount >= 100)
                    {
                        completionHandler(Image.AsPNG(), null);
                        timer.Invalidate();
                    }
                });
            });

            return(progress);
        }