예제 #1
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }

            SystemTray.IsVisible = true;
            if (NavigationContext.QueryString.ContainsKey("editprofile"))
            {
                editProfile = true;
            }

            Message = "Generate a random cartoon:";

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();
                width  = settings.DefaultImagePixelWidth;
                height = settings.DefaultImagePixelHeight;
                _sex   = settings.Sex;
                _race  = settings.Race;
            }

            ImageSource = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_FACE_PHOTO, width, height);
            GenerateRandomCartoon();
        }
예제 #2
0
        private void cam_CaptureImageAvailable(object sender, ContentReadyEventArgs e)
        {
            Dispatcher.BeginInvoke(() =>
            {
                var bmp = new BitmapImage();
                bmp.SetSource(e.ImageStream);
                var writeableBmp = BitmapFactory.New(bmp.PixelWidth, bmp.PixelHeight).FromStream(e.ImageStream);
                imageBitmap      = WriteableBitmapHelpers.TransformBitmapByCameraTypeAndPageOrientation(
                    writeableBmp, cam.CameraType, Orientation);

                var randomFileName = string.Format("{0}.jpg", Guid.NewGuid().ToString());
                LocalImagesHelper.WriteImageToIsolatedStorage(randomFileName, imageBitmap);
                using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
                {
                    db.SavedPictures.InsertOnSubmit(new PictureItem
                    {
                        Name   = randomFileName,
                        Width  = imageBitmap.PixelWidth,
                        Height = imageBitmap.PixelHeight
                    });
                    db.SubmitChanges();
                }
                e.ImageStream.Close();
            });
        }
예제 #3
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            SystemTray.IsVisible = true;

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                History.Clear();
                var cartoon = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_CARTOON_PHOTO, Constants.CartoonWidth, Constants.CartoonHeight);
                History.Add(new HistoryImage
                {
                    Name   = Constants.DEFAULT_CARTOON_PHOTO,
                    Image  = cartoon,
                    Width  = Constants.CartoonWidth,
                    Height = Constants.CartoonHeight
                });
                var savedPictures = db.SavedPictures;
                foreach (var picture in savedPictures)
                {
                    var image = LocalImagesHelper.ReadImageFromIsolatedStorage(picture.Name, picture.Width, picture.Height);
                    History.Add(new HistoryImage
                    {
                        Name   = picture.Name,
                        Image  = image,
                        Width  = picture.Width,
                        Height = picture.Height
                    });
                }
                NotifyPropertyChanged(() => History);
            }
        }
예제 #4
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }

            SystemTray.IsVisible = true;

            int width, height;

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();
                width  = settings.DefaultImagePixelWidth;
                height = settings.DefaultImagePixelHeight;
            }
            ImageSource = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_FACE_PHOTO, width, height);

            var worker = new BackgroundWorker();

            worker.DoWork += (sender, arg) =>
            {
                FaceSdkHelper.Initialize();
            };
            await worker.BeginWorkerAsync();

            var sdkImg = ImageConverter.SystemToSdk(ImageSource);
            var result = FaceSdkHelper.Detect(sdkImg);

            ImageSource = ImageConverter.SdkToSystem(result);

            if (SdkHelper.foundFace == true && SdkHelper.results.Count == 1)
            {
                (ApplicationBar.Buttons[0] as ApplicationBarIconButton).IsEnabled = true;
                (ApplicationBar.Buttons[1] as ApplicationBarIconButton).IsEnabled = true;
                IsCalculating = false;
            }
            else
            {
                MessageBox.Show("Camera did not detect your face! Try again!");
                NavigationService.GoBack();
            }

            FaceSdkHelper = null;
            GC.Collect();
        }
예제 #5
0
        private void next_Click(object sender, EventArgs e)
        {
            LocalImagesHelper.WriteImageToIsolatedStorage(Constants.DEFAULT_FACE_PHOTO, ImageSource);

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();

                settings.DefaultImagePixelHeight = ImageSource.PixelHeight;
                settings.DefaultImagePixelWidth  = ImageSource.PixelWidth;
                settings.PhoneOrientation        = orientation;

                db.SubmitChanges();
            }

            NavigationService.Navigate(new Uri(Pages.CreateProfile_ProfileCreated, UriKind.RelativeOrAbsolute));
        }
예제 #6
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }

            SystemTray.IsVisible = true;
            _pictureName         = HttpUtility.UrlDecode(NavigationContext.QueryString["image"]);
            _pictureWidth        = int.Parse(NavigationContext.QueryString["width"]);
            _pictureHeight       = int.Parse(NavigationContext.QueryString["height"]);
            Image = LocalImagesHelper.ReadImageFromIsolatedStorage(_pictureName, _pictureWidth, _pictureHeight);

            if (_pictureName == Constants.DEFAULT_CARTOON_PHOTO)
            {
                (ApplicationBar.Buttons[0] as ApplicationBarIconButton).IsEnabled = false;
            }
        }
예제 #7
0
        private void Next_Click(object sender, EventArgs e)
        {
            LocalImagesHelper.WriteImageToIsolatedStorage(Constants.DEFAULT_CARTOON_PHOTO, ImageSource);

            if (editProfile)
            {
                NavigationService.GoBack();
                return;
            }

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();
                settings.Initialized = true;
                db.SubmitChanges();
            }
            NavigationService.Navigate(new Uri(Pages.MainPage, UriKind.RelativeOrAbsolute));
        }
예제 #8
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }

            _pictureName   = HttpUtility.UrlDecode(NavigationContext.QueryString["image"]);
            _pictureWidth  = int.Parse(NavigationContext.QueryString["width"]);
            _pictureHeight = int.Parse(NavigationContext.QueryString["height"]);
            Image          = LocalImagesHelper.ReadImageFromIsolatedStorage(_pictureName, _pictureWidth, _pictureHeight);

            client = new FacebookClient();
            client.PostCompleted += Facebook_PostComplete;

            //Checking for saved token
            if (FacebookClientHelpers.GetToken() != null)
            {
                client.AccessToken = FacebookClientHelpers.GetToken();
            }
        }
예제 #9
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            SystemTray.IsVisible = true;

            while (NavigationService.CanGoBack)
            {
                NavigationService.RemoveBackEntry();
            }

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();
                PlayerName = settings.PlayerName;

                Adventure       = Constants.AvailableLevels - settings._16_PassedLevels;
                Survival        = settings._17_SurvivalScore;
                MultiplayerWin  = settings._18_MultiplayerWinScore;
                MultiplayerLose = settings._19_MultiplayerLoseScore;
            }

            Cartoon = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_CARTOON_PHOTO, Constants.CartoonWidth, Constants.CartoonHeight);
        }
예제 #10
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }

            SystemTray.IsVisible = true;

            int width, height;

            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();
                PlayerName = settings.PlayerName;
                width      = settings.DefaultImagePixelWidth;
                height     = settings.DefaultImagePixelHeight;
            }

            DefaultPhoto   = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_FACE_PHOTO, width, height);
            DefaultCartoon = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_CARTOON_PHOTO, Constants.CartoonWidth, Constants.CartoonHeight);
        }
예제 #11
0
        private void GenerateRandomCartoon()
        {
            DisableAppBarButtons();
            Message       = "Running ...";
            IsCalculating = true;

            var defaultPhoto = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_FACE_PHOTO, width, height);
            var sdkImg       = ImageConverter.SystemToSdk(defaultPhoto);
            var engine       = CtnEngine.Create();

            var generatorType = GetGeneratorGuid();
            var generator     = engine.GetSketchGenerator(generatorType);

            ThreadPool.QueueUserWorkItem((WaitCallback)((o) =>
            {
                var random = new Random(DateTime.Now.Millisecond);

                var sketch = CtnEngine.CreateSketch();
                sketch.Image = sdkImg;

                var detector = engine.GetFaceDetector();
                var alignmentor = engine.GetFaceAlignmentor();

                Dispatcher.BeginInvoke(() => Message = "Detecting face ...");
                var rect = detector.Detect(sketch);
                detector.FinalizeRect(sketch, rect);

                alignmentor.LoadRawSketch(sketch);
                sketch = alignmentor.GetSketch();

                Dispatcher.BeginInvoke(() => Message = "Generating sketch ...");
                var rcBound = new Rectangle(0, Constants.CartoonWidth, 0, Constants.CartoonHeight);
                generator.Generate(sketch, rcBound);

                Dispatcher.BeginInvoke(() => Message = "Exaggerating face ...");
                var exaggerator = engine.GetFaceExaggerator();
                exaggerator.Exaggerate(sketch, ExaggerationType.AutoAddConstr, 0.0f);

                Dispatcher.BeginInvoke(() => Message = "Applying templates ...");
                var templateFilters = engine.GetCartoonTemplates(generatorType);
                foreach (var tf in templateFilters)
                {
                    if (tf.Count == 0)
                    {
                        continue;
                    }

                    // Skip animation templates
                    if (tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_ANIMATEBODYCLOTH ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_ANIMATEBODYCLOTH_P ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_ANIMATEEXPRESSION ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_MULTIPART_ANIMATION)
                    {
                        continue;
                    }

                    // Randomly apply certain templates
                    if (tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_EXPRESSION ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_EXPRESSION_P ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_PET ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_PET_P ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_GLASSES ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_GLASS_P ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_BACKGROUND ||
                        tf.TemplateId == CtnGuid.GUID_TEMPLATETYPE_BACKGROUND_P)
                    {
                        if (random.Next(0, 2) == 0)
                        {
                            continue;
                        }
                    }

                    int index = random.Next(0, tf.Count);
                    tf.Apply(sketch, index);
                }

                Dispatcher.BeginInvoke(() => Message = "Rendering sketch ...");
                float ratio, tx, ty;
                sketch.FitToRect(Rectangle.FromLTWH(0, 0, Constants.CartoonWidth, Constants.CartoonHeight), out ratio, out tx, out ty);
                _sketchI = sketch.Render(Constants.CartoonWidth, Constants.CartoonHeight);

                Dispatcher.BeginInvoke(() =>
                {
                    Message = "A random cartoon effect was generated!";
                    ImageSource = ImageConverter.SdkToSystem(_sketchI);

                    EnableAppBarButtons();
                    IsCalculating = false;
                });

                GC.Collect();
            }));
        }