Exemplo n.º 1
0
        public IActionResult GetGauss([FromBody] GaussTransferModel data)
        {
            var returnObject = data;
            var image        = ByteArrayToBitmapImage(data.ImageByteArray);

            var kernel = data.Parameters as GaussFilterParams;

            int height = image.PixelHeight,
                width  = image.PixelWidth;

            int stride = image.PixelWidth * 4;
            int size   = image.PixelHeight * stride;

            byte[] outputImagePixels = new byte[size];
            byte[] inputImagePixels  = new byte[size];
            image.CopyPixels(outputImagePixels, stride, 0);
            image.CopyPixels(inputImagePixels, stride, 0);

            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    float leftTop, midTop, rightTop, leftMid, mid, rightMid, leftBot, midBot, rightBot;

                    for (int rgbParam = 0; rgbParam < 3; rgbParam++)
                    {
                        //Left Top
                        if (j - 1 < 0 || i - 1 < 0 || i - 1 < 0)
                        {
                            leftTop = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.LeftTop;
                        }
                        else
                        {
                            leftTop = inputImagePixels[((i - 1) * stride + 4 * (j - 1)) + rgbParam] * kernel.LeftTop;
                        }
                        //Mid Top
                        if (i - 1 < 0)
                        {
                            midTop = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.MidTop;
                        }
                        else
                        {
                            midTop = inputImagePixels[((i - 1) * stride + 4 * j) + rgbParam] * kernel.MidTop;
                        }
                        //Right Top
                        if (i - 1 < 0 || j >= width - 1)
                        {
                            rightTop = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.RightTop;
                        }
                        else
                        {
                            rightTop = inputImagePixels[((i - 1) * stride + 4 * (j + 1)) + rgbParam] * kernel.RightTop;
                        }
                        //Left Mid
                        if (j - 1 < 0)
                        {
                            leftMid = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.LeftMid;
                        }
                        else
                        {
                            leftMid = inputImagePixels[(i * stride + 4 * (j - 1)) + rgbParam] * kernel.LeftMid;
                        }
                        //Mid
                        mid = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.Mid;
                        //Right Mid
                        if (j >= width - 1)
                        {
                            rightMid = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.RightMid;
                        }
                        else
                        {
                            rightMid = inputImagePixels[(i * stride + 4 * (j + 1)) + rgbParam] * kernel.RightMid;
                        }
                        //Left Bot
                        if (j - 1 < 0 || i >= height - 1)
                        {
                            leftBot = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.LeftBot;
                        }
                        else
                        {
                            leftBot = inputImagePixels[((i + 1) * stride + 4 * (j - 1)) + rgbParam] * kernel.LeftBot;
                        }
                        //Mid Bot
                        if (i >= height - 1)
                        {
                            midBot = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.MidBot;
                        }
                        else
                        {
                            midBot = inputImagePixels[((i + 1) * stride + 4 * j) + rgbParam] * kernel.MidBot;
                        }
                        //Right Bot
                        if (i >= height - 1 || j >= width - 1)
                        {
                            rightBot = inputImagePixels[(i * stride + 4 * j) + rgbParam] * kernel.RightBot;
                        }
                        else
                        {
                            rightBot = inputImagePixels[((i + 1) * stride + 4 * (j + 1)) + rgbParam] * kernel.RightBot;
                        }

                        var tempResult = (leftTop + midTop + rightTop + leftMid + mid + rightMid + leftBot + midBot + rightBot) / kernel.KernelSum;
                        outputImagePixels[(i * stride + 4 * j) + rgbParam] = (byte)tempResult;
                    }
                }
            }

            var returnImage = BitmapImage.Create(
                image.PixelWidth,
                image.PixelHeight,
                image.DpiX,
                image.DpiY,
                image.Format,
                image.Palette,
                outputImagePixels,
                stride);

            returnObject.ImageByteArray = BitmapSourceToByteArray(returnImage);
            return(Ok(returnObject));
        }
Exemplo n.º 2
0
        private void InitializeCommands()
        {
            AddGaussFilterCommand = new RelayCommand(async x =>
            {
                var filter = GaussFilterParams.Clone() as GaussFilterParams;
                CurrentFilters.Add(filter);
                EditedImage.PhotoData.CurrentFilters.Add(filter);
                if (ServerModeEnabled)
                {
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Add("Accept", "application/json");
                        var transferObject = new GaussTransferModel()
                        {
                            ImageByteArray = ioService.BitmapSourceToByteArray(EditedImage.CurrentImage),
                            Parameters     = filter
                        };
                        var request     = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44337/weatherforecast/GetGauss");
                        request.Content = new StringContent(JsonConvert.SerializeObject(transferObject), Encoding.UTF8, "application/json");
                        var response    = await client.SendAsync(request);

                        if (response.StatusCode == System.Net.HttpStatusCode.OK)
                        {
                            var jsonString           = await response.Content.ReadAsStringAsync();
                            var resultImg            = JsonConvert.DeserializeObject <GaussTransferModel>(jsonString);
                            EditedImage.CurrentImage = ioService.ByteArrayToBitmapImage(resultImg.ImageByteArray);
                        }
                    }
                }
                else
                {
                    EditedImage.CurrentImage = imageFilterService.ApplyFilter(EditedImage.CurrentImage, filter);
                }
            });

            AddBinarizationFilterCommand = new RelayCommand(async x =>
            {
                var filter = BinarizationFilterParams.Clone() as BinarizationFilterParams;
                CurrentFilters.Add(filter);
                EditedImage.PhotoData.CurrentFilters.Add(filter);

                if (ServerModeEnabled)
                {
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Add("Accept", "application/json");
                        var transferObject = new BinaryTransferModel()
                        {
                            ImageByteArray = ioService.BitmapSourceToByteArray(EditedImage.CurrentImage),
                            Parameters     = filter
                        };
                        var request     = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44337/weatherforecast/GetBinarization");
                        request.Content = new StringContent(JsonConvert.SerializeObject(transferObject), Encoding.UTF8, "application/json");
                        var response    = await client.SendAsync(request);

                        if (response.StatusCode == System.Net.HttpStatusCode.OK)
                        {
                            var jsonString           = await response.Content.ReadAsStringAsync();
                            var resultImg            = JsonConvert.DeserializeObject <BinaryTransferModel>(jsonString);
                            EditedImage.CurrentImage = ioService.ByteArrayToBitmapImage(resultImg.ImageByteArray);
                        }
                    }
                }
                else
                {
                    EditedImage.CurrentImage = imageFilterService.ApplyFilter(EditedImage.CurrentImage, filter);
                }
            });

            SavePhotoCommand = new RelayCommand(x =>
            {
                ioService.ExportImage(editedImage);
                NavigationService.MoveToPage(Enums.PageEnum.galleryPage);
            });

            CancelPhotoCommand = new RelayCommand(x =>
            {
                NavigationService.MoveToPage(Enums.PageEnum.galleryPage);
            });
            RemoveSelectedFilter = new RelayCommand(x =>
            {
                if (SelectedFilter == null)
                {
                    return;
                }
                var filterToRemove = SelectedFilter;
                CurrentFilters.Remove(filterToRemove);
                EditedImage.PhotoData.CurrentFilters.Remove(filterToRemove);
                imageFilterService.ReApplyFilters(editedImage);
                SelectedFilter = CurrentFilters.FirstOrDefault();
            });
        }