diff --git a/JSharp/ImageProcessingCore.cs b/JSharp/ImageProcessingCore.cs index 215810c..06b4898 100644 --- a/JSharp/ImageProcessingCore.cs +++ b/JSharp/ImageProcessingCore.cs @@ -4,7 +4,7 @@ using Emgu.CV.Structure; using Emgu.CV.Util; using Emgu.CV.XImgproc; -using JSharp.Models; +using JSharp.Models.DataModels; using JSharp.Resources; using JSharp.Utility; using System; @@ -71,11 +71,12 @@ public static Mat Negate(Mat image) { for (int x = 0; x < cols; ++x) { - byte pixelValue = Marshal.ReadByte(dataPtr, y * cols + x); + int offset = y * cols + x; + byte pixelValue = Marshal.ReadByte(dataPtr, offset); byte negatedValue = (byte)(255 - pixelValue); - Marshal.WriteByte(dataPtr, y * cols + x, negatedValue); + Marshal.WriteByte(dataPtr, offset, negatedValue); } } return gray.Mat; @@ -314,7 +315,7 @@ public static Mat ApplyEdgeDetectionFilter(Mat inputImage, string currentKernel, } else if (currentKernel == Kernels.Canny) { - CvInvoke.Canny(inputImage, result, (double)convolutionInfo.Min, (double)convolutionInfo.Max); + CvInvoke.Canny(inputImage, result, convolutionInfo.Min.Value, convolutionInfo.Max.Value); } else if (currentKernel == Kernels.Laplacian) { diff --git a/JSharp/JSharp.csproj b/JSharp/JSharp.csproj index 70e53fa..b5d538e 100644 --- a/JSharp/JSharp.csproj +++ b/JSharp/JSharp.csproj @@ -145,7 +145,7 @@ - + PreserveNewest diff --git a/JSharp/Models/BusinessLogicModels/Histogram.cs b/JSharp/Models/BusinessLogicModels/Histogram.cs new file mode 100644 index 0000000..0a9db2e --- /dev/null +++ b/JSharp/Models/BusinessLogicModels/Histogram.cs @@ -0,0 +1,65 @@ +using Emgu.CV; +using LiveChartsCore.SkiaSharpView; +using LiveChartsCore; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace JSharp.Models.BusinessLogicModels +{ + internal class Histogram : BindableBase + { + private ISeries[] _histogramSeries; + public ISeries[] HistogramSeries + { + get { return _histogramSeries; } + set { SetProperty(ref _histogramSeries, value); } + } + + private int _pixelSum; + public int PixelSum + { + get { return _pixelSum; } + set { SetProperty(ref _pixelSum, value); } + } + + private ObservableCollection _histogramData; + public ObservableCollection HistogramData + { + get { return _histogramData; } + set { SetProperty(ref _histogramData, value); } + } + + public void UpdateHistogram(Mat image) + { + (int[] histogramData, int sum) = ImageProcessingCore.CalculateHistogramValues(image); + + PixelSum = sum; + + var dataSeries = new ColumnSeries + { + Values = histogramData, + YToolTipLabelFormatter = chartPoint => $"{chartPoint.Coordinate}" + }; + HistogramSeries = new ISeries[] { dataSeries }; + + List tableData = AggregateTableHistogramData(histogramData); + HistogramData = new ObservableCollection(tableData); + } + + public static List AggregateTableHistogramData(int[] histogramData) + { + List tableData = new List(); + for (int i = 0; i < 256; i++) + { + tableData.Add(new { LightnessLevel = i, PixelCount = histogramData[i] }); + } + + return tableData; + } + } +} diff --git a/JSharp/Models/AnalysisSettings.cs b/JSharp/Models/DataModels/AnalysisSettings.cs similarity index 93% rename from JSharp/Models/AnalysisSettings.cs rename to JSharp/Models/DataModels/AnalysisSettings.cs index 8b4c82d..7f6a907 100644 --- a/JSharp/Models/AnalysisSettings.cs +++ b/JSharp/Models/DataModels/AnalysisSettings.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class AnalysisSettings { diff --git a/JSharp/Models/BasicMorphologicalInfo.cs b/JSharp/Models/DataModels/BasicMorphologicalInfo.cs similarity index 95% rename from JSharp/Models/BasicMorphologicalInfo.cs rename to JSharp/Models/DataModels/BasicMorphologicalInfo.cs index 1bc0a7e..f7384a6 100644 --- a/JSharp/Models/BasicMorphologicalInfo.cs +++ b/JSharp/Models/DataModels/BasicMorphologicalInfo.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class BasicMorphologicalInfo { diff --git a/JSharp/Models/ConvolutionInfo.cs b/JSharp/Models/DataModels/ConvolutionInfo.cs similarity index 94% rename from JSharp/Models/ConvolutionInfo.cs rename to JSharp/Models/DataModels/ConvolutionInfo.cs index 69bc176..175785c 100644 --- a/JSharp/Models/ConvolutionInfo.cs +++ b/JSharp/Models/DataModels/ConvolutionInfo.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class ConvolutionInfo { diff --git a/JSharp/Models/ImageCalculatorInfo.cs b/JSharp/Models/DataModels/ImageCalculatorInfo.cs similarity index 95% rename from JSharp/Models/ImageCalculatorInfo.cs rename to JSharp/Models/DataModels/ImageCalculatorInfo.cs index 8df13de..375c17e 100644 --- a/JSharp/Models/ImageCalculatorInfo.cs +++ b/JSharp/Models/DataModels/ImageCalculatorInfo.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class ImageCalculatorInfo { diff --git a/JSharp/Models/ImageInfo.cs b/JSharp/Models/DataModels/ImageInfo.cs similarity index 91% rename from JSharp/Models/ImageInfo.cs rename to JSharp/Models/DataModels/ImageInfo.cs index b33bc99..1319a3e 100644 --- a/JSharp/Models/ImageInfo.cs +++ b/JSharp/Models/DataModels/ImageInfo.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class ImageInfo { diff --git a/JSharp/Models/OperationData.cs b/JSharp/Models/DataModels/OperationData.cs similarity index 94% rename from JSharp/Models/OperationData.cs rename to JSharp/Models/DataModels/OperationData.cs index a548c04..adfef48 100644 --- a/JSharp/Models/OperationData.cs +++ b/JSharp/Models/DataModels/OperationData.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class OperationData { diff --git a/JSharp/Models/SliderProperties.cs b/JSharp/Models/DataModels/SliderProperties.cs similarity index 85% rename from JSharp/Models/SliderProperties.cs rename to JSharp/Models/DataModels/SliderProperties.cs index 95f027d..e0622ad 100644 --- a/JSharp/Models/SliderProperties.cs +++ b/JSharp/Models/DataModels/SliderProperties.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public record SliderProperties(int MinValue, int MaxValue, int DefaultValue); } diff --git a/JSharp/Models/TwoParamsVMInfo.cs b/JSharp/Models/DataModels/TwoParamsVMInfo.cs similarity index 94% rename from JSharp/Models/TwoParamsVMInfo.cs rename to JSharp/Models/DataModels/TwoParamsVMInfo.cs index 02c199f..83ad1ca 100644 --- a/JSharp/Models/TwoParamsVMInfo.cs +++ b/JSharp/Models/DataModels/TwoParamsVMInfo.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace JSharp.Models +namespace JSharp.Models.DataModels { public class TwoParamsVMInfo { diff --git a/JSharp/Resources/Histogram.Designer.cs b/JSharp/Resources/Histogram.Designer.cs index 77f3cb7..fdf44b0 100644 --- a/JSharp/Resources/Histogram.Designer.cs +++ b/JSharp/Resources/Histogram.Designer.cs @@ -10,8 +10,9 @@ namespace JSharp.Resources { using System; - - + using System.Collections.Generic; + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// diff --git a/JSharp/ViewModels/AnalyzeParticlesWindowViewModel.cs b/JSharp/ViewModels/AnalyzeParticlesWindowViewModel.cs index 02e4d64..9dae234 100644 --- a/JSharp/ViewModels/AnalyzeParticlesWindowViewModel.cs +++ b/JSharp/ViewModels/AnalyzeParticlesWindowViewModel.cs @@ -1,4 +1,4 @@ -using JSharp.Models; +using JSharp.Models.DataModels; using Prism.Commands; using Prism.Mvvm; using System; diff --git a/JSharp/ViewModels/ConvolverWindowViewModel.cs b/JSharp/ViewModels/ConvolverWindowViewModel.cs index 176d1cf..d6bbd1d 100644 --- a/JSharp/ViewModels/ConvolverWindowViewModel.cs +++ b/JSharp/ViewModels/ConvolverWindowViewModel.cs @@ -1,7 +1,7 @@ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Flann; -using JSharp.Models; +using JSharp.Models.DataModels; using JSharp.Resources; using JSharp.Utility; using Prism.Commands; diff --git a/JSharp/ViewModels/HistogramWindowViewModel.cs b/JSharp/ViewModels/HistogramWindowViewModel.cs index ba7cab1..6442922 100644 --- a/JSharp/ViewModels/HistogramWindowViewModel.cs +++ b/JSharp/ViewModels/HistogramWindowViewModel.cs @@ -10,61 +10,22 @@ using System.Threading.Tasks; using Prism.Mvvm; using Emgu.CV.ML; +using JSharp.Models.BusinessLogicModels; namespace JSharp.ViewModels { internal class HistogramWindowViewModel : BindableBase { - private ISeries[] _histogramSeries; - public ISeries[] HistogramSeries - { - get { return _histogramSeries; } - set { SetProperty(ref _histogramSeries, value); } - } - - private int _pixelSum; - public int PixelSum - { - get { return _pixelSum; } - set { SetProperty(ref _pixelSum, value); } - } + public Histogram Histogram { get; private set; } - private ObservableCollection _histogramData; - public ObservableCollection HistogramData + public HistogramWindowViewModel() { - get { return _histogramData; } - set { SetProperty(ref _histogramData, value); } + Histogram = new Histogram(); } public void UpdateHistogram(Mat image) { - (int[] histogramData, int sum) = ImageProcessingCore.CalculateHistogramValues(image); - - //assign pixels number to label - PixelSum = sum; - - //assign data to histogram - var dataSeries = new ColumnSeries - { - Values = histogramData, - YToolTipLabelFormatter = chartPoint => $"{chartPoint.Coordinate}" - }; - HistogramSeries = new ISeries[] { dataSeries }; - - //assign data to table histogram - List tableData = AggregateTableHistogramData(histogramData); - HistogramData = new ObservableCollection(tableData); - } - - public static List AggregateTableHistogramData(int[] histogramData) - { - List tableData = new List(); - for (int i = 0; i < 256; i++) - { - tableData.Add(new { LightnessLevel = i, PixelCount = histogramData[i] }); - } - - return tableData; + Histogram.UpdateHistogram(image); } } } diff --git a/JSharp/ViewModels/ImageCalculatorWindowViewModel.cs b/JSharp/ViewModels/ImageCalculatorWindowViewModel.cs index 6d7b38e..f1605f3 100644 --- a/JSharp/ViewModels/ImageCalculatorWindowViewModel.cs +++ b/JSharp/ViewModels/ImageCalculatorWindowViewModel.cs @@ -1,5 +1,5 @@ using Emgu.CV; -using JSharp.Models; +using JSharp.Models.DataModels; using JSharp.Utility; using Prism.Commands; using Prism.Mvvm; diff --git a/JSharp/ViewModels/InpaintWindowViewModel.cs b/JSharp/ViewModels/InpaintWindowViewModel.cs index fa56019..bc5477b 100644 --- a/JSharp/ViewModels/InpaintWindowViewModel.cs +++ b/JSharp/ViewModels/InpaintWindowViewModel.cs @@ -1,5 +1,5 @@ using Emgu.CV; -using JSharp.Models; +using JSharp.Models.DataModels; using Prism.Commands; using Prism.Mvvm; using System; diff --git a/JSharp/ViewModels/MainWindowViewModel.cs b/JSharp/ViewModels/MainWindowViewModel.cs index 5254b1b..3223df1 100644 --- a/JSharp/ViewModels/MainWindowViewModel.cs +++ b/JSharp/ViewModels/MainWindowViewModel.cs @@ -2,7 +2,7 @@ using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; -using JSharp.Models; +using JSharp.Models.DataModels; using JSharp.Properties; using JSharp.Resources; using JSharp.Utility; diff --git a/JSharp/ViewModels/NewImageWindowViewModel.cs b/JSharp/ViewModels/NewImageWindowViewModel.cs index 9669813..65d6eb5 100644 --- a/JSharp/ViewModels/NewImageWindowViewModel.cs +++ b/JSharp/ViewModels/NewImageWindowViewModel.cs @@ -2,8 +2,8 @@ using Emgu.CV.CvEnum; using Emgu.CV.Structure; using JSharp; -using JSharp.Models; -using JSharp.Resources; +using JSharp.Models.BusinessLogicModels; +using JSharp.Models.DataModels; using JSharp.Utility; using LiveChartsCore.Defaults; using Microsoft.Win32; @@ -253,9 +253,11 @@ public void SaveAs() CvInvoke.Imwrite(fileName, this.MatImage, new[] { new KeyValuePair(ImwriteFlags.TiffCompression, (int)ImwriteFlags.TiffCompression) }); break; default: - MessageBox.Show("Invalid file format selected.", Strings.Error, MessageBoxButton.OK, MessageBoxImage.Error); + MessageBox.Show("Invalid file format selected.", Resources.Strings.Error, MessageBoxButton.OK, MessageBoxImage.Error); return; } + + filePath = fileName; } } @@ -316,8 +318,8 @@ public void EqualizeHistogram() { Mat image = this.MatImage; List histogramData; - histogramData = this.histogramWindowViewModel?.HistogramData.ToList() - ?? HistogramWindowViewModel.AggregateTableHistogramData(ImageProcessingCore.CalculateHistogramValues(image).histogramData); + histogramData = this.histogramWindowViewModel?.Histogram.HistogramData.ToList() + ?? Histogram.AggregateTableHistogramData(ImageProcessingCore.CalculateHistogramValues(image).histogramData); image = ImageProcessingCore.EqualizeHistogram(image, histogramData); UpdateImageSource(image); } @@ -366,12 +368,12 @@ public void Convolve(string currentKernel, ConvolutionInfo convolutionInfo, IEnu { Mat image = this.MatImage; BorderType borderType = convolutionInfo.BorderPixelsOption; - string[] edgeDetectionCases = { Kernels.SobelEW, Kernels.SobelNS, Kernels.Canny, Kernels.Laplacian }; - if (currentKernel == Kernels.BoxBlur) + string[] edgeDetectionCases = { Resources.Kernels.SobelEW, Resources.Kernels.SobelNS, Resources.Kernels.Canny, Resources.Kernels.Laplacian }; + if (currentKernel == Resources.Kernels.BoxBlur) { image = ImageProcessingCore.ApplyBlur(image, borderType, 3); } - else if (currentKernel == Kernels.GaussianBlur) + else if (currentKernel == Resources.Kernels.GaussianBlur) { image = ImageProcessingCore.ApplyGaussianBlur(image, borderType, sigmaX: 1.5, sigmaY: 1.5, 3); } diff --git a/JSharp/ViewModels/PlotlineGraphWindowViewModel.cs b/JSharp/ViewModels/PlotlineGraphWindowViewModel.cs index 177d6aa..e0f9e97 100644 --- a/JSharp/ViewModels/PlotlineGraphWindowViewModel.cs +++ b/JSharp/ViewModels/PlotlineGraphWindowViewModel.cs @@ -44,7 +44,6 @@ private ISeries[] PlotGraph(Point[] points, Mat image) return seriesList.ToArray(); } - // 24.04 doesn't work entirely correctly, to be fixed private List BresenhamLine(Mat image, System.Windows.Point p1, System.Windows.Point p2) { List linePoints = new List(); diff --git a/JSharp/ViewModels/SettingsWindowViewModel.cs b/JSharp/ViewModels/SettingsWindowViewModel.cs index 4c1cb8c..b634b8c 100644 --- a/JSharp/ViewModels/SettingsWindowViewModel.cs +++ b/JSharp/ViewModels/SettingsWindowViewModel.cs @@ -58,7 +58,7 @@ public SettingsWindowViewModel() PngCompressionLevel = Settings.Default.pngCompressionLevel; JpgSaveQuality = Settings.Default.jpqSaveQuality; SaveFileExtension = Settings.Default.saveFileExtension; - ZoomFactor = Convert.ToUInt32(Settings.Default.ZoomFactor * 10); + ZoomFactor = Convert.ToUInt32(Settings.Default.ZoomFactor * 100); if (string.IsNullOrEmpty(Settings.Default.LanguageVersion)) Language = "English"; else Language = Settings.Default.LanguageVersion; diff --git a/JSharp/ViewModels/SummaryWindowViewModel.cs b/JSharp/ViewModels/SummaryWindowViewModel.cs index 4ca9da7..a41fef1 100644 --- a/JSharp/ViewModels/SummaryWindowViewModel.cs +++ b/JSharp/ViewModels/SummaryWindowViewModel.cs @@ -1,4 +1,4 @@ -using JSharp.Models; +using JSharp.Models.DataModels; using Prism.Mvvm; using System; using System.Collections.Generic; diff --git a/JSharp/ViewModels/TwoParamsWindowViewModel.cs b/JSharp/ViewModels/TwoParamsWindowViewModel.cs index 1c53d46..80e3817 100644 --- a/JSharp/ViewModels/TwoParamsWindowViewModel.cs +++ b/JSharp/ViewModels/TwoParamsWindowViewModel.cs @@ -1,4 +1,4 @@ -using JSharp.Models; +using JSharp.Models.DataModels; using Prism.Commands; using Prism.Mvvm; using System; diff --git a/JSharp/Views/HistogramWindow.xaml b/JSharp/Views/HistogramWindow.xaml index 2fc0604..2512e38 100644 --- a/JSharp/Views/HistogramWindow.xaml +++ b/JSharp/Views/HistogramWindow.xaml @@ -14,15 +14,15 @@ - - - + diff --git a/JSharp/Views/ImageCalculatorWindow.xaml.cs b/JSharp/Views/ImageCalculatorWindow.xaml.cs index 408038c..0f1d9d1 100644 --- a/JSharp/Views/ImageCalculatorWindow.xaml.cs +++ b/JSharp/Views/ImageCalculatorWindow.xaml.cs @@ -1,4 +1,4 @@ -using JSharp.Models; +using JSharp.Models.DataModels; using JSharp.Resources; using JSharp.Utility; using JSharp.ViewModels; diff --git a/JSharp/config.json b/JSharp/config.json deleted file mode 100644 index e69de29..0000000 diff --git a/JSharp/shortcuts.json b/JSharp/shortcuts.json new file mode 100644 index 0000000..35b73a7 --- /dev/null +++ b/JSharp/shortcuts.json @@ -0,0 +1,9 @@ +{ + "Shortcuts": { + "Duplicate": "", + "Copy": "Ctrl+C", + "Save": "Ctrl+S", + "ZoomIn": "Ctrl+OemPlus", + "ZoomOut": "Ctrl+OemMinus" + } +} \ No newline at end of file