public void applyZoneHistogramFilter(int n, int k) { int[] filteredRed = FilterController.HistogramZoneFilter(this.redHistogramArray, this.redArray, imageModel.getWidth() * imageModel.getHeight(), n, k); int[] filteredGreen = FilterController.HistogramZoneFilter(this.greenHistogramArray, this.greenArray, imageModel.getWidth() * imageModel.getHeight(), n, k); int[] filteredBlue = FilterController.HistogramZoneFilter(this.blueHistogramArray, this.blueArray, imageModel.getWidth() * imageModel.getHeight(), n, k); Bitmap image; if (imageModel.getFilteredImage() != null) { image = imageModel.getFilteredImage(); } else { image = imageModel.getBaseImage(); } this.undoBuffer.push(image); Bitmap bmp = new Bitmap(imageModel.getWidth(), imageModel.getHeight()); Color tmpColor; for (int x = 0; x < imageModel.getWidth(); x++) { for (int y = 0; y < imageModel.getHeight(); y++) { tmpColor = Color.FromArgb(filteredRed[x * imageModel.getHeight() + y], filteredGreen[x * imageModel.getHeight() + y], filteredBlue[x * imageModel.getHeight() + y]); bmp.SetPixel(x, y, tmpColor); this.redArray[x * imageModel.getHeight() + y] = filteredRed[x * imageModel.getHeight() + y]; this.greenArray[x * imageModel.getHeight() + y] = filteredGreen[x * imageModel.getHeight() + y]; this.blueArray[x * imageModel.getHeight() + y] = filteredBlue[x * imageModel.getHeight() + y]; } } imageModel.setFilteredImage(bmp); baseView.setBaseImageFromBitmap(bmp); imageModel.setCIEImage(setCIEImage(bmp)); RGBModel[,] rgbImage = convertToRGB(imageModel.getCIEImage()); histogramView.setBaseImage(imageModel.getFilteredImage()); histogramView.setRedHistogramChannel(redArray, imageModel.getHeight() * imageModel.getWidth()); histogramView.setGreenHistogramChannel(greenArray, imageModel.getHeight() * imageModel.getWidth()); histogramView.setBlueHistogramChannel(blueArray, imageModel.getHeight() * imageModel.getWidth()); channelView.setFilteredChannelImages(bmp, setRedChannel(rgbImage), setGreenChannel(rgbImage), setBlueChannel(rgbImage)); }