public IActionResult GetBinarization([FromBody] BinaryTransferModel data) { var returnObject = data; var image = ByteArrayToBitmapImage(data.ImageByteArray); var obj = data.Parameters; int precision = obj.PrecisionParameter; float adjustment = obj.AdjustmentParameter; float rParam = obj.RedParameter; float gParam = obj.GreenParameter; float bParam = obj.BlueParameter; int height = image.PixelHeight, width = image.PixelWidth; int[,] integralImage = new int[height, width]; int stride = image.PixelWidth * 4; int size = image.PixelHeight * stride; byte[] pixels = new byte[size]; image.CopyPixels(pixels, stride, 0); for (int i = 0; i < height; i++) { int sum = 0; for (int j = 0; j < width; j++) { sum += GetGrayScale(stride, pixels, i, j, rParam, gParam, bParam); if (i == 0) { integralImage[i, j] = sum; } else { integralImage[i, j] = integralImage[i - 1, j] + sum; } } } for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { var x1 = i - precision / 2; if (x1 <= 0) { x1 = 1; } var x2 = i + precision / 2; if (x2 >= height) { x2 = height - 1; } var y1 = j - precision / 2; if (y1 <= 0) { y1 = 1; } var y2 = j + precision / 2; if (y2 >= width) { y2 = width - 1; } int count = (x2 - x1) * (y2 - y1); int sum = integralImage[x2, y2] - integralImage[x2, y1 - 1] - integralImage[x1 - 1, y2] + integralImage[x1 - 1, y1 - 1]; if ((GetGrayScale(stride, pixels, i, j, rParam, gParam, bParam) * count) <= (sum * (100 - adjustment) / 100)) { int index = i * stride + 4 * j; pixels[index] = 0; pixels[index + 1] = 0; pixels[index + 2] = 0; } else { int index = i * stride + 4 * j; pixels[index] = 255; pixels[index + 1] = 255; pixels[index + 2] = 255; } } } var resultImage = BitmapImage.Create( image.PixelWidth, image.PixelHeight, image.DpiX, image.DpiY, image.Format, image.Palette, pixels, stride); returnObject.ImageByteArray = BitmapSourceToByteArray(resultImage); HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StringContent(JsonConvert.SerializeObject(returnObject), Encoding.UTF8, "application/json"); return(Ok(returnObject)); }
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(); }); }