public static WriteableBitmap EffectVignetting(this WriteableBitmap bmp, WriteableBitmap maskBmp, double vignetting)
        {
            // マスク画像を元画像のサイズにリサイズする
            var resizedBmp = maskBmp.Resize(bmp.PixelWidth, bmp.PixelHeight);

            return Effect(bmp, new VignettingEffect(resizedBmp, vignetting));
        }
Esempio n. 2
0
        /// <summary>
        /// Displays an image on the LED matrix
        /// </summary>
        /// <param name="image">Bitmap to display on the LED matrix</param>
        /// <returns>Task for tracking the status of the async call</returns>
        public async Task DisplayImage(WriteableBitmap image)
        {
            WriteableBitmap resizedBitmap = image.Resize(
                this.PixelWidth,
                this.PixelHeight,
                WriteableBitmapExtensions.Interpolation.Bilinear);

            List<Color> colors = resizedBitmap.Flip(WriteableBitmapExtensions.FlipMode.Horizontal).ToColorList();

            colors = colors.FlipEvenColumns(this.PixelHeight);

            List<Color> perceptualColors = colors.Select(
                color => color.ToPerceptual().ApplyGamma(1.5)).ToList();

            colors.Clear();
            colors.AddRange(perceptualColors);

            colors.RemoveAt(MagicPixel);

            IEnumerable<byte> bytes = colors.Get21BitPixelBytes();

            App.Firmata.sendSysex(LED_RESET, new Buffer(0));
            await Task.Delay(1);

            App.Firmata.SendPixelBlob(bytes, 30);
            await Task.Delay(1);

            App.Firmata.sendSysex(LED_RESET, new Buffer(0));
            await Task.Delay(1);
        }
        public static WriteableBitmap EffectBakumatsu(this WriteableBitmap bmp, WriteableBitmap maskBmp)
        {
            // マスク画像を元画像のサイズにリサイズする
            var resizedBmp = maskBmp.Resize(bmp.PixelWidth, bmp.PixelHeight);

            return Effect(bmp, new BakumatsuEffect(resizedBmp));
        }
        public static WriteableBitmap EffectToycamera(this WriteableBitmap bmp, WriteableBitmap maskBmp)
        {
            // マスク画像を元画像のサイズにリサイズする
            var resizedBmp = maskBmp.Resize(bmp.PixelWidth, bmp.PixelHeight);

            // コントラスト調整、彩度調整、口径食風処理のエフェクトオブジェクトを作成
            var effectors = new List<IEffect>();
            effectors.Add(new ContrastEffect(0.8));
            effectors.Add(new SaturationEffect(0.7));
            effectors.Add(new VignettingEffect(resizedBmp, 0.8));

            // 複数のエフェクト処理を実行する
            return Effect(bmp, effectors);
        }
        private static WriteableBitmap scaleBitmapDown(WriteableBitmap bitmap)
        {
            int minDimension = Math.Min(bitmap.PixelWidth, bitmap.PixelHeight);

            if (minDimension <= CALCULATE_BITMAP_MIN_DIMENSION)
            {
                // If the bitmap is small enough already, just return it
                return bitmap;
            }

            float scaleRatio = CALCULATE_BITMAP_MIN_DIMENSION / (float)minDimension;

            WriteableBitmap resizedBitmap = bitmap.Resize((Int32)(bitmap.PixelWidth * scaleRatio), (Int32)(bitmap.PixelHeight * scaleRatio), WriteableBitmapExtensions.Interpolation.Bilinear);
            return resizedBitmap;
        }
Esempio n. 6
0
        /// <summary>
        /// Displays an image on the LED matrix
        /// </summary>
        /// <param name="image">Bitmap to display on the LED matrix</param>
        /// <returns>Task for tracking the status of the async call</returns>
        public async Task DisplayImage(WriteableBitmap image)
        {
            WriteableBitmap resizedBitmap = image.Resize(
                this.PixelHeight,
                this.PixelWidth,
                WriteableBitmapExtensions.Interpolation.Bilinear);

            List<Color> colors = resizedBitmap.ToColorList();

            //colors.ForEach(c => colorsAdjusted.Add(c.ApplyGamma(1.5)));
            //colors.ForEach(c => colorsAdjusted.Add(c.ToPerceptual()));

            IEnumerable<byte> bytes = colors.Get21BitPixelBytes();

            App.Firmata.SendPixelBlob(bytes, 30);
        }
Esempio n. 7
0
 /// <summary>
 /// Loads image from file to bitmap and displays it in UI.
 /// </summary>
 public async Task LoadImage(StorageFile file)
 {
     ImageProperties imgProp = await file.Properties.GetImagePropertiesAsync();
                 
     bool sourceSet = false; 
     using (var imgStream = await file.OpenAsync(FileAccessMode.Read))
     {                
         bitmap = new WriteableBitmap((int)imgProp.Width, (int)imgProp.Height);
         bitmap.SetSource(imgStream);
         if (imgProp.Width > 2600 || imgProp.Height > 2600)
         {
             double scale = 1.0;
             if (imgProp.Height > 2600)
                 scale = 2600.0 / imgProp.Height;
             else if (imgProp.Width > 2600)
                 scale = Math.Min(scale, 2600.0 / imgProp.Width);
             bitmap = bitmap.Resize((int)(imgProp.Width * scale), (int)(imgProp.Height * scale),  WriteableBitmapExtensions.Interpolation.Bilinear);
         }                                
     }
     ExtractText();
 }
 public void CreatePictrue(WriteableBitmap source)
 {
     pictrueshow.Source = source;
     pictrueshow.UpdateLayout();
     int i = 0;
     for (int w = 0; w < GameGlobal.MaxTilesW; w++)
     {
         for (int h = 0; h < GameGlobal.MaxTilesH; h++)
         {
             var tile = Tiles.Children[i] as Tile;
             WriteableBitmap temp = source.Resize((int)Tiles.Width, (int)Tiles.Height, WriteableBitmapExtensions.Interpolation.Bilinear);
             var rect = new Rect(w * GameGlobal.TileW, h * GameGlobal.TileH, (int)GameGlobal.TileW, (int)GameGlobal.TileH);
             temp = temp.Crop(rect);
             temp.Invalidate();
             tile.IndexX = tile.CorrectIndexX = w;
             tile.IndexY = tile.CorrectIndexY = h;
             tile.ImageSource = temp;
             i += 1;
         }
     }
     foreach (Tile item in Tiles.Children)
     {
         var r = GameGlobal.Random.Next(Tiles.Children.Count);
         var temp = Tiles.Children[r] as Tile;
         var x = temp.IndexX;
         var y = temp.IndexY;
         temp.IndexX = item.IndexX;
         temp.IndexY = item.IndexY;
         item.IndexX = x;
         item.IndexY = y;
     }
     ANI_Starting.Begin();
 }
        private async void LoadWallpaperArt()
        {
            if (_loaded ||
                !App.Locator.AppSettingsHelper.Read("WallpaperArt", true, SettingsStrategy.Roaming)) return;

            var wait = App.Locator.AppSettingsHelper.Read<int>("WallpaperDayWait");
            var created = App.Locator.AppSettingsHelper.ReadJsonAs<DateTime>("WallpaperCreated");

            // Set the image brush
            var imageBrush = new ImageBrush { Opacity = .25, Stretch = Stretch.UniformToFill, AlignmentY = AlignmentY.Top};
            LayoutGrid.Background = imageBrush;

            // Once a week remake the wallpaper
            if ((DateTime.Now - created).TotalDays > wait)
            {
                var albums =
                    App.Locator.CollectionService.Albums.ToList()
                        .Where(p => p.HasArtwork)
                        .ToList();

                var albumCount = albums.Count;

                if (albumCount < 10) return;


                var h = Window.Current.Bounds.Height;
                var rows = (int) Math.Ceiling(h/(ActualWidth/5));
                const int collumns = 5;

                var albumSize = (int) Window.Current.Bounds.Width/collumns;

                var numImages = rows*5;
                var imagesNeeded = numImages - albumCount;

                var shuffle = await Task.FromResult(albums
                    .Shuffle()
                    .Take(numImages > albumCount ? albumCount : numImages)
                    .ToList());

                if (imagesNeeded > 0)
                {
                    var repeatList = new List<Album>();

                    while (imagesNeeded > 0)
                    {
                        var takeAmmount = imagesNeeded > albumCount ? albumCount : imagesNeeded;

                        await Task.Run(() => repeatList.AddRange(shuffle.Shuffle().Take(takeAmmount)));

                        imagesNeeded -= shuffle.Count;
                    }

                    shuffle.AddRange(repeatList);
                }

                // Initialize an empty WriteableBitmap.
                var destination = new WriteableBitmap((int) Window.Current.Bounds.Width,
                    (int) Window.Current.Bounds.Height);
                var col = 0; // Current Column Position
                var row = 0; // Current Row Position
                destination.Clear(Colors.Black); // Set the background color of the image to black

                // will be copied
                foreach (var artworkPath in shuffle.Select(album => string.Format(AppConstant.ArtworkPath, album.Id)))
                {
                    var file = await WinRtStorageHelper.GetFileAsync(artworkPath);

                    // Read the image file into a RandomAccessStream
                    using (var fileStream = await file.OpenReadAsync())
                    {
                        try
                        {
                            // Now that you have the raw bytes, create a Image Decoder
                            var decoder = await BitmapDecoder.CreateAsync(fileStream);

                            // Get the first frame from the decoder because we are picking an image
                            var frame = await decoder.GetFrameAsync(0);

                            // Convert the frame into pixels
                            var pixelProvider = await frame.GetPixelDataAsync();

                            // Convert pixels into byte array
                            var srcPixels = pixelProvider.DetachPixelData();
                            var wid = (int) frame.PixelWidth;
                            var hgt = (int) frame.PixelHeight;
                            // Create an in memory WriteableBitmap of the same size
                            var bitmap = new WriteableBitmap(wid, hgt); // Temporary bitmap into which the source

                            using (var pixelStream = bitmap.PixelBuffer.AsStream())
                            {
                                pixelStream.Seek(0, SeekOrigin.Begin);
                                // Push the pixels from the original file into the in-memory bitmap
                                await pixelStream.WriteAsync(srcPixels, 0, srcPixels.Length);
                                bitmap.Invalidate();

                                // Resize the in-memory bitmap and Blit (paste) it at the correct tile
                                // position (row, col)
                                destination.Blit(new Rect(col*albumSize, row*albumSize, albumSize, albumSize),
                                    bitmap.Resize(albumSize, albumSize, WriteableBitmapExtensions.Interpolation.Bilinear),
                                    new Rect(0, 0, albumSize, albumSize));
                                col++;
                                if (col < collumns) continue;

                                row++;
                                col = 0;
                            }
                        }
                        catch
                        {
                            // ignored
                        }
                    }
                }

                var wallpaper =
                    await WinRtStorageHelper.CreateFileAsync("wallpaper.jpg", ApplicationData.Current.LocalFolder);
                using (var rndWrite = await wallpaper.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await destination.ToStreamAsJpeg(rndWrite);
                }

                App.Locator.AppSettingsHelper.WriteAsJson("WallpaperCreated", DateTime.Now);
                // If there are 30 or less albums then recreate in one day, else wait a week
                App.Locator.AppSettingsHelper.Write("WallpaperDayWait", albums.Count < 30 ? 1 : 7);

                imageBrush.ImageSource = null;
                imageBrush.ImageSource = new BitmapImage(new Uri("ms-appdata:/local/wallpaper.jpg"));
            }
            else if (created != DateTime.MinValue)
            {
                // Not the first time, so there must already be one created
                imageBrush.ImageSource = new BitmapImage(new Uri("ms-appdata:/local/wallpaper.jpg"));
            }

            _loaded = true;
        }
Esempio n. 10
0
        async Task CreateCollage(IReadOnlyList<StorageFile> files)
        {
            progressIndicator.Visibility = Windows.UI.Xaml.Visibility.Visible;
            var sampleDataGroups = files;
            if (sampleDataGroups.Count() == 0) return;

            try
            {
                // Do a square-root of the number of images to get the
                // number of images on x and y axis
                int number = (int)Math.Ceiling(Math.Sqrt((double)files.Count));
                // Calculate the width of each small image in the collage
                int numberX = (int)(ImageCollage.ActualWidth / number);
                int numberY = (int)(ImageCollage.ActualHeight / number);
                // Initialize an empty WriteableBitmap.
                WriteableBitmap destination = new WriteableBitmap(numberX * number, numberY * number);
                int col = 0; // Current Column Position
                int row = 0; // Current Row Position
                destination.Clear(Colors.White); // Set the background color of the image to white
                WriteableBitmap bitmap; // Temporary bitmap into which the source
                // will be copied
                foreach (var file in files)
                {
                    // Create RandomAccessStream reference from the current selected image
                    RandomAccessStreamReference streamRef = RandomAccessStreamReference.CreateFromFile(file);
                    int wid = 0;
                    int hgt = 0;
                    byte[] srcPixels;
                    // Read the image file into a RandomAccessStream
                    using (IRandomAccessStreamWithContentType fileStream = await streamRef.OpenReadAsync())
                    {
                        // Now that you have the raw bytes, create a Image Decoder
                        BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
                        // Get the first frame from the decoder because we are picking an image
                        BitmapFrame frame = await decoder.GetFrameAsync(0);
                        // Convert the frame into pixels
                        PixelDataProvider pixelProvider = await frame.GetPixelDataAsync();
                        // Convert pixels into byte array
                        srcPixels = pixelProvider.DetachPixelData();
                        wid = (int)frame.PixelWidth;
                        hgt = (int)frame.PixelHeight;
                        // Create an in memory WriteableBitmap of the same size
                        bitmap = new WriteableBitmap(wid, hgt);
                        Stream pixelStream = bitmap.PixelBuffer.AsStream();
                        pixelStream.Seek(0, SeekOrigin.Begin);
                        // Push the pixels from the original file into the in-memory bitmap
                        pixelStream.Write(srcPixels, 0, (int)srcPixels.Length);
                        bitmap.Invalidate();

                        if (row < number)
                        {
                            // Resize the in-memory bitmap and Blit (paste) it at the correct tile
                            // position (row, col)
                            destination.Blit(new Rect(col * numberX, row * numberY, numberX, numberY),
                                bitmap.Resize(numberX, numberY, WriteableBitmapExtensions.Interpolation.Bilinear),
                                new Rect(0, 0, numberX, numberY));
                            col++;
                            if (col >= number)
                            {
                                row++;
                                col = 0;
                            }
                        }
                    }
                }

                ImageCollage.Source = destination;
                ((WriteableBitmap)ImageCollage.Source).Invalidate();
                progressIndicator.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
            }
            catch (Exception ex)
            {
                // TODO: Log Error, unable to render image
                throw;
            }
        }
Esempio n. 11
0
        ///////////////////////////////////////////////////////////////////////////
        // Use the Nokia Imaging SDK to apply a filter to a selected image

        private async void AppBarBtnEdit_Click(object sender, RoutedEventArgs e)
        {
            progressRing.IsEnabled = true;
            progressRing.IsActive = true;
            progressRing.Visibility = Visibility.Visible;

            // Create NOK Imaging SDK effects pipeline and run it
            var imageStream = new BitmapImageSource(originalBitmap.AsBitmap());
            using (var effect = new FilterEffect(imageStream))
            {
                var filter = new Lumia.Imaging.Adjustments.GrayscaleFilter();
                effect.Filters = new[] { filter };
                
                // Render the image to a WriteableBitmap.
                var renderer = new WriteableBitmapRenderer(effect, originalBitmap);
                editedBitmap = await renderer.RenderAsync();
                editedBitmap.Invalidate();
            }

            Image.Source = originalBitmap;

            Image.Visibility = Visibility.Collapsed;

           

            //Resizing the editedBitmap to 128x128
            var resized1 = editedBitmap.Resize(128, 128, Windows.UI.Xaml.Media.Imaging.WriteableBitmapExtensions.Interpolation.Bilinear);

            //converting the editedBitmap to byte array
            byte[] edit_arr = resized1.ToByteArray();

            
            
            
            //obtaining the images folder
            StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
            StorageFolder subfolder = await folder.GetFolderAsync("Images");
         
            
            //create list of all the files in the images folder
            var pictures = await subfolder.GetFilesAsync();
            
            

            double ldiff = 50;//least percentage difference for an image to be a match
            string dispText = "Try again";//default message to be displayed

            byte threshold = 124;
            
            //process through all images 
            foreach (var file in pictures)
            {
                
                if (file != null)
                {
                    // Use WriteableBitmapEx to easily load image from a stream
                    using (var stream = await file.OpenReadAsync())
                    {
                        listBitmap = await new WriteableBitmap(1, 1).FromStream(stream);
                        stream.Dispose();
                    }

                    //convert obtained image to byte array
                    byte[] list_arr = listBitmap.ToByteArray();


                    byte[] difference = new byte[edit_arr.Length];

                    //compare byte array of both the images
                    for (int i=0;i<list_arr.Length;i++)
                    {
                        difference[i] = (byte)Math.Abs(edit_arr[i]-list_arr[i]);
                    }


                    //calculate percentage difference
                    int differentPixels = 0;

                    foreach(byte b in difference )
                    {
                        if (b > threshold)
                            differentPixels++;
                    }

                    double percentage = (double)differentPixels / (double)list_arr.Length;
                    percentage = percentage * 100;
                    

                    if (percentage <= ldiff)
                    {
                        ldiff = percentage;
                        dispText =file.DisplayName;
                    }
                }
            }

            tb.Text = dispText;

            progressRing.IsEnabled = false;
            progressRing.IsActive = false;
            progressRing.Visibility = Visibility.Collapsed;


            tb.Visibility = Visibility.Visible;
            Image.Visibility = Visibility.Visible;
            

            var tmp = new RenderTargetBitmap();
            await tmp.RenderAsync(source);

            var buffer = await tmp.GetPixelsAsync();
            var width = tmp.PixelWidth;
            var height = tmp.PixelHeight;
            editedBitmap = await new WriteableBitmap(1, 1).FromPixelBuffer(buffer, width, height);

            AppBarBtnSpeech.IsEnabled = true;
            AppBarBtnSpeech.Visibility = Visibility.Visible;

            AppBarBtnSave.IsEnabled = true;


        }
Esempio n. 12
0
        private async void processImage(int size)
        {
            if (Button1.Tag.ToString() == "0")
            {
                MessageDialog md = new MessageDialog("请先选择图片");
                await md.ShowAsync();
            }
            else
            {
                try
                {
                    StorageFile file = (StorageFile)Image1.Tag;

                    //WriteableBitmap image = (WriteableBitmap)Image1.Source;

                    BitmapImage image = new BitmapImage();
                    await image.SetSourceAsync(await file.OpenAsync(FileAccessMode.Read));

                    double proportion = Convert.ToDouble(image.PixelWidth) / Convert.ToDouble(image.PixelHeight);

                    int width = 360;
                    if (size == 0)
                    {
                        width = image.PixelWidth;
                    }
                    else if (size==1)
                    {
                        if (image.PixelWidth > 1024)
                        {
                            width = 1024;
                        }
                        else
                        {
                            width = image.PixelWidth/2;
                        }
                        
                    }
                    else
                    {
                        width = 320;
                    }

                    int height = Convert.ToInt32(width / proportion);


                    WriteableBitmap wb = new WriteableBitmap(image.PixelWidth, image.PixelHeight);
                    await wb.SetSourceAsync(await file.OpenAsync(FileAccessMode.Read));

                    System.Diagnostics.Debug.WriteLine("wb:" + wb.PixelHeight);

                    WriteableBitmap newwb = wb.Resize(width, height, WriteableBitmapExtensions.Interpolation.NearestNeighbor);

                    Image1.Source = newwb;
                    uploadButton.Tag = "1";//可以上传了

                    // Image1.Source = wb;
                }
                catch (Exception exp)
                {
                    System.Diagnostics.Debug.WriteLine(exp.Message);
                }
            }
        }