개정판 c1659a98
issue #0000 Markus.Image.ImageCompare 추가
Change-Id: I82eafc1d99c6765d77546e28ba6151a4766026a5
CompareLib/CompareLib.cs | ||
---|---|---|
1 |
//using Leadtools; |
|
2 |
using System; |
|
3 |
using System.Collections.Generic; |
|
4 |
using System.Linq; |
|
5 |
using System.Text; |
|
6 |
using System.Windows; |
|
7 |
|
|
8 |
using OpenCvSharp; |
|
9 |
namespace MARKUS |
|
10 |
{ |
|
11 |
public class CompareLib |
|
12 |
{ |
|
13 |
|
|
14 |
string ColorString_Stroke = @"#0000FF"; |
|
15 |
string ColorString_LowLight = @"#FFFFFF"; |
|
16 |
string ColorString_Highlight = @"#0000FF"; |
|
17 |
|
|
18 |
public CompareLib() |
|
19 |
{ |
|
20 |
//this.SetLicense(); |
|
21 |
} |
|
22 |
public string ImageCompare(System.IO.Stream originalPng, System.IO.Stream targetPng) |
|
23 |
{ |
|
24 |
using (var img1 = new ImageMagick.MagickImage(originalPng)) |
|
25 |
{ |
|
26 |
img1.ColorFuzz = new ImageMagick.Percentage(80); |
|
27 |
//img1.Grayscale(ImageMagick.PixelIntensityMethod.Average); |
|
28 |
using (var img2 = new ImageMagick.MagickImage(targetPng)) |
|
29 |
{ |
|
30 |
//img2.ColorFuzz = new ImageMagick.Percentage(80); |
|
31 |
//img2.Grayscale(ImageMagick.PixelIntensityMethod.Average); |
|
32 |
using (var imgDiff = new ImageMagick.MagickImage()) |
|
33 |
{ |
|
34 |
img1.StrokeColor = new ImageMagick.MagickColor(ColorString_Stroke); |
|
35 |
//img1.SetLowlightColor(ImageMagick.MagickColor.Transparent); |
|
36 |
img1.SetLowlightColor(new ImageMagick.MagickColor(ColorString_LowLight)); |
|
37 |
img1.SetHighlightColor(new ImageMagick.MagickColor(ColorString_Highlight)); |
|
38 |
//img1.Composite(img2, CompositeOperator.SrcOver); |
|
39 |
double diff = img1.Compare(img2, new ImageMagick.ErrorMetric(), imgDiff); |
|
40 |
//img1.Composite(imgDiff, CompositeOperator.Over); |
|
41 |
string outputFile = System.IO.Path.GetTempFileName().Replace(".tmp",".png"); |
|
42 |
imgDiff.Write(outputFile); |
|
43 |
return outputFile; |
|
44 |
} |
|
45 |
} |
|
46 |
} |
|
47 |
} |
|
48 |
|
|
49 |
public string ImageCompare_File(string originalPng, string targetPng) |
|
50 |
{ |
|
51 |
using (var img1 = new ImageMagick.MagickImage(originalPng)) |
|
52 |
{ |
|
53 |
img1.ColorFuzz = new ImageMagick.Percentage(80); |
|
54 |
using (var img2 = new ImageMagick.MagickImage(targetPng)) |
|
55 |
{ |
|
56 |
//img2.Grayscale(ImageMagick.PixelIntensityMethod.Average); |
|
57 |
//img2.ColorFuzz = new ImageMagick.Percentage(60); |
|
58 |
using (var imgDiff = new ImageMagick.MagickImage()) |
|
59 |
{ |
|
60 |
img1.StrokeColor = new ImageMagick.MagickColor(ColorString_Stroke); |
|
61 |
//img1.SetLowlightColor(ImageMagick.MagickColor.Transparent); |
|
62 |
img1.SetLowlightColor(new ImageMagick.MagickColor(ColorString_LowLight)); |
|
63 |
img1.SetHighlightColor(new ImageMagick.MagickColor(ColorString_Highlight)); |
|
64 |
//img1.Composite(img2, ImageMagick.CompositeOperator.Src); |
|
65 |
double diff = img1.Compare(img2, new ImageMagick.ErrorMetric(), imgDiff); |
|
66 |
//img1.Composite(imgDiff, CompositeOperator.Over); |
|
67 |
string outputFile = System.IO.Path.GetTempFileName().Replace(".tmp", ".png"); |
|
68 |
imgDiff.Write(outputFile); |
|
69 |
return outputFile; |
|
70 |
} |
|
71 |
} |
|
72 |
} |
|
73 |
} |
|
74 |
private static bool CheckInBound(OpenCvSharp.Rect rect, List<OpenCvSharp.Rect> list) |
|
75 |
{ |
|
76 |
foreach (var r in list) |
|
77 |
{ |
|
78 |
if (rect.X > r.X && rect.Y > r.Y && |
|
79 |
(rect.X + rect.Width) < (r.X + r.Width) && |
|
80 |
(rect.Y + rect.Height) < (r.Y + r.Height)) |
|
81 |
return false; |
|
82 |
} |
|
83 |
return true; |
|
84 |
} |
|
85 |
|
|
86 |
public List<System.Windows.Rect> GetBoundBoxInImage(string targetImage) |
|
87 |
{ |
|
88 |
List<System.Windows.Rect> pointSet = new List<System.Windows.Rect>(); |
|
89 |
var gray = new Mat(targetImage, ImreadModes.GrayScale); |
|
90 |
var org = new Mat(targetImage); |
|
91 |
|
|
92 |
var blur = new Mat(); |
|
93 |
Cv2.GaussianBlur(gray, blur, new OpenCvSharp.Size(9, 9), 0); |
|
94 |
|
|
95 |
#region get canny |
|
96 |
var canny = new Mat(); |
|
97 |
Cv2.Canny(blur, canny, 20, 135); |
|
98 |
#endregion |
|
99 |
|
|
100 |
|
|
101 |
#region find contours |
|
102 |
OpenCvSharp.Point[][] contours; |
|
103 |
HierarchyIndex[] hierarchyIndexes; |
|
104 |
//Cv2.FindContours( |
|
105 |
// canny, |
|
106 |
// out contours, |
|
107 |
// out hierarchyIndexes, |
|
108 |
// mode: RetrievalModes.External, |
|
109 |
// method: ContourApproximationModes.ApproxTC89KCOS); |
|
110 |
Cv2.FindContours( |
|
111 |
canny, |
|
112 |
out contours, |
|
113 |
out hierarchyIndexes, |
|
114 |
mode: RetrievalModes.Tree, |
|
115 |
method: ContourApproximationModes.ApproxTC89KCOS); |
|
116 |
#endregion |
|
117 |
|
|
118 |
Console.WriteLine($"contours={contours.Length}"); |
|
119 |
|
|
120 |
//get rect info from contour |
|
121 |
var rectList = new List<OpenCvSharp.Rect>(); |
|
122 |
var rectDraw = new List<OpenCvSharp.Rect>(); |
|
123 |
foreach (var c in contours) |
|
124 |
{ |
|
125 |
//skip too small obj |
|
126 |
if (c.Length > 5) |
|
127 |
rectList.Add(Cv2.BoundingRect(c)); |
|
128 |
} |
|
129 |
|
|
130 |
|
|
131 |
for (int i = 0; i < rectList.Count; i++) |
|
132 |
{ |
|
133 |
//only draw bigger one if fully overlap |
|
134 |
if (CheckInBound(rectList[i], rectList)) |
|
135 |
{ |
|
136 |
rectDraw.Add(rectList[i]); |
|
137 |
} |
|
138 |
} |
|
139 |
|
|
140 |
|
|
141 |
var image = org.Clone(); |
|
142 |
foreach (var rect in rectDraw) |
|
143 |
{ |
|
144 |
var width = rect.X + rect.Width; |
|
145 |
var height = rect.Y + rect.Height; |
|
146 |
pointSet.Add(new System.Windows.Rect(rect.X, rect.Y, rect.Width, rect.Height)); |
|
147 |
|
|
148 |
//var midPoint = getMiddlePoint(new OpenCvSharp.Point(rect.X, rect.Y), new OpenCvSharp.Point(width, height)); |
|
149 |
//Cv2.Ellipse(image, midPoint, new OpenCvSharp.Size(rect.Width / 1.2, rect.Height / 1.2), 0, 0, 359, Scalar.Red, 2, LineTypes.Link8); |
|
150 |
//Cv2.Rectangle(image, new OpenCvSharp.Point(rect.X, rect.Y), new OpenCvSharp.Point(width, height), Scalar.Green, 2); |
|
151 |
|
|
152 |
} |
|
153 |
|
|
154 |
//using (new Window("image", image)) |
|
155 |
////using (new Window("gray blur", blur)) |
|
156 |
////using (new Window("canny", canny)) |
|
157 |
|
|
158 |
//{ |
|
159 |
// Cv2.WaitKey(); |
|
160 |
//} |
|
161 |
|
|
162 |
return pointSet; |
|
163 |
} |
|
164 |
public static OpenCvSharp.Point getMiddlePoint(OpenCvSharp.Point p1, OpenCvSharp.Point p2) |
|
165 |
{ |
|
166 |
return new OpenCvSharp.Point { X = (p1.X + p2.X) / 2, Y = (p1.Y + p2.Y) / 2 }; |
|
167 |
} |
|
168 |
|
|
169 |
public System.IO.Stream GetStreamFromUrl(string url) |
|
170 |
{ |
|
171 |
byte[] imageData = null; |
|
172 |
|
|
173 |
using (var wc = new System.Net.WebClient()) |
|
174 |
imageData = wc.DownloadData(url); |
|
175 |
|
|
176 |
return new System.IO.MemoryStream(imageData); |
|
177 |
} |
|
178 |
|
|
179 |
//public System.IO.Stream ChangeCmpUrlToPng(string url) |
|
180 |
//{ |
|
181 |
// Leadtools.Codecs.RasterCodecs codecs = new Leadtools.Codecs.RasterCodecs(); |
|
182 |
// // Load an image at its own bits per pixel |
|
183 |
|
|
184 |
|
|
185 |
// Leadtools.RasterImage image = codecs.Load(GetStreamFromUrl(url), 0, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1); |
|
186 |
// System.IO.MemoryStream stream = new System.IO.MemoryStream(); |
|
187 |
// //string tempFile = System.IO.Path.GetTempFileName(); |
|
188 |
// // Save the image as a 24-bit Windows BMP file |
|
189 |
// codecs.Save(image, stream, Leadtools.RasterImageFormat.Png, image.BitsPerPixel); |
|
190 |
// // Dispose of the objects we created |
|
191 |
// image.Dispose(); |
|
192 |
// codecs.Dispose(); |
|
193 |
|
|
194 |
// return stream; |
|
195 |
//} |
|
196 |
|
|
197 |
//강인구 수정 |
|
198 |
public string ChangeCmpUrlToPng_File(string url) |
|
199 |
{ |
|
200 |
System.Net.WebClient client = new System.Net.WebClient(); |
|
201 |
|
|
202 |
byte[] imageBytes = client.DownloadData(new Uri(url)); |
|
203 |
|
|
204 |
//string tempFile = System.IO.Path.GetTempFileName().Replace(@".tmp", @".cmp"); |
|
205 |
string tempFile = System.IO.Path.GetTempFileName().Replace(@".tmp", @".png"); |
|
206 |
|
|
207 |
System.Drawing.Image image; |
|
208 |
System.IO.MemoryStream ms = new System.IO.MemoryStream(imageBytes, 0, imageBytes.Length); |
|
209 |
ms.Write(imageBytes, 0, imageBytes.Length); |
|
210 |
image = System.Drawing.Image.FromStream(ms, true);//Exception occurs here |
|
211 |
|
|
212 |
image.Save(tempFile, System.Drawing.Imaging.ImageFormat.Png); |
|
213 |
|
|
214 |
return tempFile; |
|
215 |
|
|
216 |
//var image = new System.Windows.Media.Imaging.BitmapImage(new Uri(url)); |
|
217 |
|
|
218 |
//ViewerDataModel.Instance.ImageViewPath_C = defaultBitmapImage_Compare; |
|
219 |
//ViewerDataModel.Instance.ImageViewWidth_C = defaultBitmapImage_Compare.PixelWidth; |
|
220 |
//ViewerDataModel.Instance.ImageViewHeight_C = defaultBitmapImage_Compare.PixelHeight; |
|
221 |
|
|
222 |
//if (image.IsDownloading) |
|
223 |
//{ |
|
224 |
// image.DownloadCompleted += (ex, arg) => |
|
225 |
// { |
|
226 |
// System.IO.MemoryStream stream = new System.IO.MemoryStream(); |
|
227 |
// tempFile = System.IO.Path.GetTempFileName().Replace(@".tmp", @".cmp"); |
|
228 |
// }; |
|
229 |
// return tempFile; |
|
230 |
//} |
|
231 |
//else |
|
232 |
//{ |
|
233 |
// return tempFile; |
|
234 |
//} |
|
235 |
|
|
236 |
//Leadtools.Codecs.RasterCodecs codecs = new Leadtools.Codecs.RasterCodecs(); |
|
237 |
//Load an image at its own bits per pixel |
|
238 |
|
|
239 |
|
|
240 |
//Leadtools.RasterImage image = codecs.Load(GetStreamFromUrl(url), 0, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1); |
|
241 |
//System.IO.MemoryStream stream = new System.IO.MemoryStream(); |
|
242 |
//string tempFile = System.IO.Path.GetTempFileName().Replace(@".tmp", @".png"); |
|
243 |
//Save the image as a 24 - bit Windows BMP file |
|
244 |
//codecs.Save(image, tempFile, Leadtools.RasterImageFormat.Png, image.BitsPerPixel); |
|
245 |
//Dispose of the objects we created |
|
246 |
//image.Dispose(); |
|
247 |
//codecs.Dispose(); |
|
248 |
} |
|
249 |
|
|
250 |
|
|
251 |
|
|
252 |
//public string ChangeCmpToPng(string fileName) |
|
253 |
//{ |
|
254 |
// Leadtools.Codecs.RasterCodecs codecs = new Leadtools.Codecs.RasterCodecs(); |
|
255 |
// // Load an image at its own bits per pixel |
|
256 |
// Leadtools.RasterImage image = codecs.Load(fileName,0,Leadtools.Codecs.CodecsLoadByteOrder.Bgr,1,1); |
|
257 |
// string tempFile = System.IO.Path.GetTempFileName(); |
|
258 |
// // Save the image as a 24-bit Windows BMP file |
|
259 |
// codecs.Save(image, tempFile, Leadtools.RasterImageFormat.Png, image.BitsPerPixel); |
|
260 |
// // Dispose of the objects we created |
|
261 |
// image.Dispose(); |
|
262 |
// codecs.Dispose(); |
|
263 |
|
|
264 |
// return tempFile; |
|
265 |
//} |
|
266 |
|
|
267 |
//public bool SetLicense() |
|
268 |
//{ |
|
269 |
// try |
|
270 |
// { |
|
271 |
// // TODO: Change this to use your license file and developer key */ |
|
272 |
// //string licenseFilePath = "Replace this with the path to the LEADTOOLS license file"; |
|
273 |
// //string developerKey = "Replace this with your developer key"; |
|
274 |
// //RasterSupport.SetLicense(licenseFilePath, developerKey); |
|
275 |
// } |
|
276 |
// catch (Exception ex) |
|
277 |
// { |
|
278 |
// System.Diagnostics.Debug.Write(ex.Message); |
|
279 |
// } |
|
280 |
|
|
281 |
// if (RasterSupport.KernelExpired) |
|
282 |
// { |
|
283 |
// string dir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); |
|
284 |
// /* Try the common LIC directory */ |
|
285 |
// //string licenseFileRelativePath = "C:\\LEADTOOLS 19\\Common\\License\\LEADTOOLS.LIC"; |
|
286 |
// //string keyFileRelativePath = "C:\\LEADTOOLS 19\\Common\\License\\LEADTOOLS.LIC.key"; |
|
287 |
|
|
288 |
// ////강인구 추가(라이선스 경로 변경) |
|
289 |
// string licenseFileRelativePath = @"C:\LEADTOOLS 19\Common\License\LEADTOOLS.LIC"; |
|
290 |
// string keyFileRelativePath = @"C:\LEADTOOLS 19\Common\License\LEADTOOLS.LIC.KEY"; |
|
291 |
|
|
292 |
// //string licenseFileRelativePath = @"F:\full_license.key\full_license.lic"; |
|
293 |
// //string keyFileRelativePath = @"F:\full_license.key\full_license.key"; |
|
294 |
|
|
295 |
// if (System.IO.File.Exists(licenseFileRelativePath) && System.IO.File.Exists(keyFileRelativePath)) |
|
296 |
// { |
|
297 |
// string developerKey = System.IO.File.ReadAllText(keyFileRelativePath); |
|
298 |
// try |
|
299 |
// { |
|
300 |
// RasterSupport.SetLicense(licenseFileRelativePath, developerKey); |
|
301 |
// } |
|
302 |
// catch (Exception ex) |
|
303 |
// { |
|
304 |
// System.Diagnostics.Debug.Write(ex.Message); |
|
305 |
// } |
|
306 |
// } |
|
307 |
// } |
|
308 |
|
|
309 |
// if (RasterSupport.KernelExpired) |
|
310 |
// { |
|
311 |
// string msg = "Your license file is missing, invalid or expired. LEADTOOLS will not function. Please contact LEAD Sales for information on obtaining a valid license."; |
|
312 |
// string logmsg = string.Format("*** NOTE: {0} ***{1}", msg, Environment.NewLine); |
|
313 |
// System.Diagnostics.Debugger.Log(0, null, "*******************************************************************************" + Environment.NewLine); |
|
314 |
// System.Diagnostics.Debugger.Log(0, null, logmsg); |
|
315 |
// System.Diagnostics.Debugger.Log(0, null, "*******************************************************************************" + Environment.NewLine); |
|
316 |
|
|
317 |
// System.Diagnostics.Process.Start("https://www.leadtools.com/downloads/evaluation-form.asp?evallicenseonly=true"); |
|
318 |
|
|
319 |
// return false; |
|
320 |
// } |
|
321 |
|
|
322 |
// return true; |
|
323 |
//} |
|
324 |
} |
|
325 |
} |
CompareLib/CompareLib.csproj | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<Import Project="..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\build\OpenCvSharp3-AnyCPU.props" Condition="Exists('..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\build\OpenCvSharp3-AnyCPU.props')" /> |
|
4 |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
5 |
<PropertyGroup> |
|
6 |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
7 |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
8 |
<ProjectGuid>{AB53FC3B-606B-499E-B2A8-ACDB3BCC2C98}</ProjectGuid> |
|
9 |
<OutputType>Library</OutputType> |
|
10 |
<AppDesignerFolder>Properties</AppDesignerFolder> |
|
11 |
<RootNamespace>CompareLib</RootNamespace> |
|
12 |
<AssemblyName>CompareLib</AssemblyName> |
|
13 |
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> |
|
14 |
<FileAlignment>512</FileAlignment> |
|
15 |
<NuGetPackageImportStamp> |
|
16 |
</NuGetPackageImportStamp> |
|
17 |
</PropertyGroup> |
|
18 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
19 |
<DebugSymbols>true</DebugSymbols> |
|
20 |
<DebugType>full</DebugType> |
|
21 |
<Optimize>false</Optimize> |
|
22 |
<OutputPath>bin\Debug\</OutputPath> |
|
23 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
24 |
<ErrorReport>prompt</ErrorReport> |
|
25 |
<WarningLevel>4</WarningLevel> |
|
26 |
<PlatformTarget>x64</PlatformTarget> |
|
27 |
</PropertyGroup> |
|
28 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
29 |
<DebugType>pdbonly</DebugType> |
|
30 |
<Optimize>true</Optimize> |
|
31 |
<OutputPath>bin\Release\</OutputPath> |
|
32 |
<DefineConstants>TRACE</DefineConstants> |
|
33 |
<ErrorReport>prompt</ErrorReport> |
|
34 |
<WarningLevel>4</WarningLevel> |
|
35 |
</PropertyGroup> |
|
36 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> |
|
37 |
<DebugSymbols>true</DebugSymbols> |
|
38 |
<OutputPath>bin\x86\Debug\</OutputPath> |
|
39 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
40 |
<DebugType>full</DebugType> |
|
41 |
<PlatformTarget>x86</PlatformTarget> |
|
42 |
<ErrorReport>prompt</ErrorReport> |
|
43 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
44 |
</PropertyGroup> |
|
45 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> |
|
46 |
<OutputPath>bin\x86\Release\</OutputPath> |
|
47 |
<DefineConstants>TRACE</DefineConstants> |
|
48 |
<Optimize>true</Optimize> |
|
49 |
<DebugType>pdbonly</DebugType> |
|
50 |
<PlatformTarget>x86</PlatformTarget> |
|
51 |
<ErrorReport>prompt</ErrorReport> |
|
52 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
53 |
</PropertyGroup> |
|
54 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_HyoSung|AnyCPU'"> |
|
55 |
<DebugSymbols>true</DebugSymbols> |
|
56 |
<OutputPath>bin\Debug_HyoSung\</OutputPath> |
|
57 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
58 |
<DebugType>full</DebugType> |
|
59 |
<PlatformTarget>x64</PlatformTarget> |
|
60 |
<ErrorReport>prompt</ErrorReport> |
|
61 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
62 |
</PropertyGroup> |
|
63 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_HyoSung|x86'"> |
|
64 |
<DebugSymbols>true</DebugSymbols> |
|
65 |
<OutputPath>bin\x86\Debug_HyoSung\</OutputPath> |
|
66 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
67 |
<DebugType>full</DebugType> |
|
68 |
<PlatformTarget>x86</PlatformTarget> |
|
69 |
<ErrorReport>prompt</ErrorReport> |
|
70 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
71 |
</PropertyGroup> |
|
72 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_CadExport|AnyCPU'"> |
|
73 |
<DebugSymbols>true</DebugSymbols> |
|
74 |
<OutputPath>bin\Debug_CadExport\</OutputPath> |
|
75 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
76 |
<DebugType>full</DebugType> |
|
77 |
<PlatformTarget>x64</PlatformTarget> |
|
78 |
<ErrorReport>prompt</ErrorReport> |
|
79 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
80 |
</PropertyGroup> |
|
81 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_CadExport|x86'"> |
|
82 |
<DebugSymbols>true</DebugSymbols> |
|
83 |
<OutputPath>bin\x86\Debug_CadExport\</OutputPath> |
|
84 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
85 |
<DebugType>full</DebugType> |
|
86 |
<PlatformTarget>x86</PlatformTarget> |
|
87 |
<ErrorReport>prompt</ErrorReport> |
|
88 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
89 |
</PropertyGroup> |
|
90 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_SNI|AnyCPU'"> |
|
91 |
<DebugSymbols>true</DebugSymbols> |
|
92 |
<OutputPath>bin\Debug_SNI\</OutputPath> |
|
93 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
94 |
<DebugType>full</DebugType> |
|
95 |
<PlatformTarget>x64</PlatformTarget> |
|
96 |
<ErrorReport>prompt</ErrorReport> |
|
97 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
98 |
</PropertyGroup> |
|
99 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_SNI|x86'"> |
|
100 |
<DebugSymbols>true</DebugSymbols> |
|
101 |
<OutputPath>bin\x86\Debug_SNI\</OutputPath> |
|
102 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
103 |
<DebugType>full</DebugType> |
|
104 |
<PlatformTarget>x86</PlatformTarget> |
|
105 |
<ErrorReport>prompt</ErrorReport> |
|
106 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
107 |
</PropertyGroup> |
|
108 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Hyosung|AnyCPU'"> |
|
109 |
<DebugSymbols>true</DebugSymbols> |
|
110 |
<OutputPath>bin\Release_Hyosung\</OutputPath> |
|
111 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
112 |
<DebugType>full</DebugType> |
|
113 |
<PlatformTarget>x64</PlatformTarget> |
|
114 |
<ErrorReport>prompt</ErrorReport> |
|
115 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
116 |
</PropertyGroup> |
|
117 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Hyosung|x86'"> |
|
118 |
<DebugSymbols>true</DebugSymbols> |
|
119 |
<OutputPath>bin\x86\Release_Hyosung\</OutputPath> |
|
120 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
121 |
<DebugType>full</DebugType> |
|
122 |
<PlatformTarget>x86</PlatformTarget> |
|
123 |
<ErrorReport>prompt</ErrorReport> |
|
124 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
125 |
</PropertyGroup> |
|
126 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_PEMSS|AnyCPU'"> |
|
127 |
<DebugSymbols>true</DebugSymbols> |
|
128 |
<OutputPath>bin\Release_PEMSS\</OutputPath> |
|
129 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
130 |
<DebugType>full</DebugType> |
|
131 |
<PlatformTarget>x64</PlatformTarget> |
|
132 |
<ErrorReport>prompt</ErrorReport> |
|
133 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
134 |
</PropertyGroup> |
|
135 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_PEMSS|x86'"> |
|
136 |
<DebugSymbols>true</DebugSymbols> |
|
137 |
<OutputPath>bin\x86\Release_PEMSS\</OutputPath> |
|
138 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
139 |
<DebugType>full</DebugType> |
|
140 |
<PlatformTarget>x86</PlatformTarget> |
|
141 |
<ErrorReport>prompt</ErrorReport> |
|
142 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
143 |
</PropertyGroup> |
|
144 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Daelim|AnyCPU'"> |
|
145 |
<DebugSymbols>true</DebugSymbols> |
|
146 |
<OutputPath>bin\Debug_Daelim\</OutputPath> |
|
147 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
148 |
<DebugType>full</DebugType> |
|
149 |
<PlatformTarget>x64</PlatformTarget> |
|
150 |
<ErrorReport>prompt</ErrorReport> |
|
151 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
152 |
</PropertyGroup> |
|
153 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Daelim|x86'"> |
|
154 |
<DebugSymbols>true</DebugSymbols> |
|
155 |
<OutputPath>bin\x86\Debug_Daelim\</OutputPath> |
|
156 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
157 |
<DebugType>full</DebugType> |
|
158 |
<PlatformTarget>x86</PlatformTarget> |
|
159 |
<ErrorReport>prompt</ErrorReport> |
|
160 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
161 |
</PropertyGroup> |
|
162 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Default|AnyCPU'"> |
|
163 |
<DebugSymbols>true</DebugSymbols> |
|
164 |
<OutputPath>bin\Release_Default\</OutputPath> |
|
165 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
166 |
<DebugType>full</DebugType> |
|
167 |
<PlatformTarget>x64</PlatformTarget> |
|
168 |
<ErrorReport>prompt</ErrorReport> |
|
169 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
170 |
</PropertyGroup> |
|
171 |
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Default|x86'"> |
|
172 |
<DebugSymbols>true</DebugSymbols> |
|
173 |
<OutputPath>bin\x86\Release_Default\</OutputPath> |
|
174 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
175 |
<DebugType>full</DebugType> |
|
176 |
<PlatformTarget>x86</PlatformTarget> |
|
177 |
<ErrorReport>prompt</ErrorReport> |
|
178 |
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> |
|
179 |
</PropertyGroup> |
|
180 |
<ItemGroup> |
|
181 |
<Reference Include="Magick.NET-x64, Version=7.0.0.0, Culture=neutral, PublicKeyToken=2004825badfa91ec, processorArchitecture=AMD64"> |
|
182 |
<HintPath>..\packages\Magick.NET-7.0.0.18-Q16-x64.1.0.0\lib\net40-client\Magick.NET-x64.dll</HintPath> |
|
183 |
</Reference> |
|
184 |
<Reference Include="Magick.NET.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=2004825badfa91ec, processorArchitecture=MSIL"> |
|
185 |
<HintPath>..\packages\Magick.NET-7.0.0.18-Q16-x64.1.0.0\lib\net40-client\Magick.NET.Core.dll</HintPath> |
|
186 |
</Reference> |
|
187 |
<Reference Include="Magick.NET.Wrapper-x64, Version=7.0.0.0, Culture=neutral, PublicKeyToken=2004825badfa91ec, processorArchitecture=AMD64"> |
|
188 |
<HintPath>..\packages\Magick.NET-7.0.0.18-Q16-x64.1.0.0\lib\net40-client\Magick.NET.Wrapper-x64.dll</HintPath> |
|
189 |
</Reference> |
|
190 |
<Reference Include="OpenCvSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6adad1e807fea099, processorArchitecture=MSIL"> |
|
191 |
<HintPath>..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\lib\net40\OpenCvSharp.dll</HintPath> |
|
192 |
</Reference> |
|
193 |
<Reference Include="OpenCvSharp.Blob, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6adad1e807fea099, processorArchitecture=MSIL"> |
|
194 |
<HintPath>..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\lib\net40\OpenCvSharp.Blob.dll</HintPath> |
|
195 |
</Reference> |
|
196 |
<Reference Include="OpenCvSharp.Extensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6adad1e807fea099, processorArchitecture=MSIL"> |
|
197 |
<HintPath>..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\lib\net40\OpenCvSharp.Extensions.dll</HintPath> |
|
198 |
</Reference> |
|
199 |
<Reference Include="OpenCvSharp.UserInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6adad1e807fea099, processorArchitecture=MSIL"> |
|
200 |
<HintPath>..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\lib\net40\OpenCvSharp.UserInterface.dll</HintPath> |
|
201 |
</Reference> |
|
202 |
<Reference Include="PresentationCore" /> |
|
203 |
<Reference Include="System" /> |
|
204 |
<Reference Include="System.Core" /> |
|
205 |
<Reference Include="System.Drawing" /> |
|
206 |
<Reference Include="System.Xml.Linq" /> |
|
207 |
<Reference Include="System.Data.DataSetExtensions" /> |
|
208 |
<Reference Include="Microsoft.CSharp" /> |
|
209 |
<Reference Include="System.Data" /> |
|
210 |
<Reference Include="System.Xml" /> |
|
211 |
<Reference Include="WindowsBase" /> |
|
212 |
</ItemGroup> |
|
213 |
<ItemGroup> |
|
214 |
<Compile Include="CompareLib.cs" /> |
|
215 |
<Compile Include="Properties\AssemblyInfo.cs" /> |
|
216 |
</ItemGroup> |
|
217 |
<ItemGroup> |
|
218 |
<None Include="packages.config" /> |
|
219 |
</ItemGroup> |
|
220 |
<ItemGroup> |
|
221 |
<Content Include="OpenCvSharpExtern.dll"> |
|
222 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
223 |
</Content> |
|
224 |
</ItemGroup> |
|
225 |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
226 |
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
|
227 |
<PropertyGroup> |
|
228 |
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText> |
|
229 |
</PropertyGroup> |
|
230 |
<Error Condition="!Exists('..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\build\OpenCvSharp3-AnyCPU.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\OpenCvSharp3-AnyCPU.3.3.1.20171117\build\OpenCvSharp3-AnyCPU.props'))" /> |
|
231 |
</Target> |
|
232 |
</Project> |
CompareLib/Properties/AssemblyInfo.cs | ||
---|---|---|
1 |
using System.Reflection; |
|
2 |
using System.Runtime.CompilerServices; |
|
3 |
using System.Runtime.InteropServices; |
|
4 |
|
|
5 |
// General Information about an assembly is controlled through the following |
|
6 |
// set of attributes. Change these attribute values to modify the information |
|
7 |
// associated with an assembly. |
|
8 |
[assembly: AssemblyTitle("CompareLib")] |
|
9 |
[assembly: AssemblyDescription("")] |
|
10 |
[assembly: AssemblyConfiguration("")] |
|
11 |
[assembly: AssemblyCompany("")] |
|
12 |
[assembly: AssemblyProduct("CompareLib")] |
|
13 |
[assembly: AssemblyCopyright("Copyright © 2018")] |
|
14 |
[assembly: AssemblyTrademark("")] |
|
15 |
[assembly: AssemblyCulture("")] |
|
16 |
|
|
17 |
// Setting ComVisible to false makes the types in this assembly not visible |
|
18 |
// to COM components. If you need to access a type in this assembly from |
|
19 |
// COM, set the ComVisible attribute to true on that type. |
|
20 |
[assembly: ComVisible(false)] |
|
21 |
|
|
22 |
// The following GUID is for the ID of the typelib if this project is exposed to COM |
|
23 |
[assembly: Guid("ab53fc3b-606b-499e-b2a8-acdb3bcc2c98")] |
|
24 |
|
|
25 |
// Version information for an assembly consists of the following four values: |
|
26 |
// |
|
27 |
// Major Version |
|
28 |
// Minor Version |
|
29 |
// Build Number |
|
30 |
// Revision |
|
31 |
// |
|
32 |
// You can specify all the values or you can default the Build and Revision Numbers |
|
33 |
// by using the '*' as shown below: |
|
34 |
// [assembly: AssemblyVersion("1.0.*")] |
|
35 |
[assembly: AssemblyVersion("1.0.0.0")] |
|
36 |
[assembly: AssemblyFileVersion("1.0.0.0")] |
CompareLib/packages.config | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<packages> |
|
3 |
<package id="Magick.NET-7.0.0.18-Q16-x64" version="1.0.0" targetFramework="net40" /> |
|
4 |
<package id="OpenCvSharp3-AnyCPU" version="3.3.1.20171117" targetFramework="net40" /> |
|
5 |
</packages> |
ComparerTestWPF/App.config | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<configuration> |
|
3 |
<startup> |
|
4 |
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/> |
|
5 |
</startup> |
|
6 |
</configuration> |
ComparerTestWPF/App.xaml | ||
---|---|---|
1 |
<Application x:Class="ComparerTestWPF.App" |
|
2 |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|
3 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
4 |
xmlns:local="clr-namespace:ComparerTestWPF" |
|
5 |
StartupUri="MainWindow.xaml"> |
|
6 |
<Application.Resources> |
|
7 |
|
|
8 |
</Application.Resources> |
|
9 |
</Application> |
ComparerTestWPF/App.xaml.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Configuration; |
|
4 |
using System.Data; |
|
5 |
using System.Linq; |
|
6 |
using System.Threading.Tasks; |
|
7 |
using System.Windows; |
|
8 |
|
|
9 |
namespace ComparerTestWPF |
|
10 |
{ |
|
11 |
/// <summary> |
|
12 |
/// App.xaml에 대한 상호 작용 논리 |
|
13 |
/// </summary> |
|
14 |
public partial class App : Application |
|
15 |
{ |
|
16 |
} |
|
17 |
} |
ComparerTestWPF/ComparerTestWPF.csproj | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
4 |
<PropertyGroup> |
|
5 |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
6 |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
7 |
<ProjectGuid>{154D99CA-A021-4FFD-A590-5CEBF6C99BB3}</ProjectGuid> |
|
8 |
<OutputType>WinExe</OutputType> |
|
9 |
<RootNamespace>ComparerTestWPF</RootNamespace> |
|
10 |
<AssemblyName>ComparerTestWPF</AssemblyName> |
|
11 |
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> |
|
12 |
<FileAlignment>512</FileAlignment> |
|
13 |
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> |
|
14 |
<WarningLevel>4</WarningLevel> |
|
15 |
<Deterministic>true</Deterministic> |
|
16 |
<PublishUrl>publish\</PublishUrl> |
|
17 |
<Install>true</Install> |
|
18 |
<InstallFrom>Disk</InstallFrom> |
|
19 |
<UpdateEnabled>false</UpdateEnabled> |
|
20 |
<UpdateMode>Foreground</UpdateMode> |
|
21 |
<UpdateInterval>7</UpdateInterval> |
|
22 |
<UpdateIntervalUnits>Days</UpdateIntervalUnits> |
|
23 |
<UpdatePeriodically>false</UpdatePeriodically> |
|
24 |
<UpdateRequired>false</UpdateRequired> |
|
25 |
<MapFileExtensions>true</MapFileExtensions> |
|
26 |
<ApplicationRevision>0</ApplicationRevision> |
|
27 |
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> |
|
28 |
<IsWebBootstrapper>false</IsWebBootstrapper> |
|
29 |
<UseApplicationTrust>false</UseApplicationTrust> |
|
30 |
<BootstrapperEnabled>true</BootstrapperEnabled> |
|
31 |
<TargetFrameworkProfile /> |
|
32 |
<NuGetPackageImportStamp> |
|
33 |
</NuGetPackageImportStamp> |
|
34 |
</PropertyGroup> |
|
35 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
36 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
37 |
<DebugSymbols>true</DebugSymbols> |
|
38 |
<DebugType>full</DebugType> |
|
39 |
<Optimize>false</Optimize> |
|
40 |
<OutputPath>bin\Debug\</OutputPath> |
|
41 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
42 |
<ErrorReport>prompt</ErrorReport> |
|
43 |
<WarningLevel>4</WarningLevel> |
|
44 |
<Prefer32Bit>false</Prefer32Bit> |
|
45 |
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
|
46 |
</PropertyGroup> |
|
47 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
48 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
49 |
<DebugType>pdbonly</DebugType> |
|
50 |
<Optimize>true</Optimize> |
|
51 |
<OutputPath>bin\Release\</OutputPath> |
|
52 |
<DefineConstants>TRACE</DefineConstants> |
|
53 |
<ErrorReport>prompt</ErrorReport> |
|
54 |
<WarningLevel>4</WarningLevel> |
|
55 |
<Prefer32Bit>false</Prefer32Bit> |
|
56 |
</PropertyGroup> |
|
57 |
<ItemGroup> |
|
58 |
<Reference Include="System" /> |
|
59 |
<Reference Include="System.Data" /> |
|
60 |
<Reference Include="System.Drawing" /> |
|
61 |
<Reference Include="System.Xml" /> |
|
62 |
<Reference Include="Microsoft.CSharp" /> |
|
63 |
<Reference Include="System.Core" /> |
|
64 |
<Reference Include="System.Xml.Linq" /> |
|
65 |
<Reference Include="System.Data.DataSetExtensions" /> |
|
66 |
<Reference Include="System.Net.Http" /> |
|
67 |
<Reference Include="System.Xaml"> |
|
68 |
<RequiredTargetFramework>4.0</RequiredTargetFramework> |
|
69 |
</Reference> |
|
70 |
<Reference Include="Telerik.Windows.Controls, Version=2019.1.220.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL"> |
|
71 |
<SpecificVersion>False</SpecificVersion> |
|
72 |
<HintPath>..\..\lib\RCWPF\2019.1.220.40\Telerik.Windows.Controls.dll</HintPath> |
|
73 |
</Reference> |
|
74 |
<Reference Include="Telerik.Windows.Controls.ImageEditor, Version=2019.1.220.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL"> |
|
75 |
<SpecificVersion>False</SpecificVersion> |
|
76 |
<HintPath>..\..\lib\RCWPF\2019.1.220.40\Telerik.Windows.Controls.ImageEditor.dll</HintPath> |
|
77 |
</Reference> |
|
78 |
<Reference Include="Telerik.Windows.Controls.Input, Version=2019.1.220.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL"> |
|
79 |
<SpecificVersion>False</SpecificVersion> |
|
80 |
<HintPath>..\..\lib\RCWPF\2019.1.220.40\Telerik.Windows.Controls.Input.dll</HintPath> |
|
81 |
</Reference> |
|
82 |
<Reference Include="WindowsBase" /> |
|
83 |
<Reference Include="PresentationCore" /> |
|
84 |
<Reference Include="PresentationFramework" /> |
|
85 |
</ItemGroup> |
|
86 |
<ItemGroup> |
|
87 |
<ApplicationDefinition Include="App.xaml"> |
|
88 |
<Generator>MSBuild:Compile</Generator> |
|
89 |
<SubType>Designer</SubType> |
|
90 |
</ApplicationDefinition> |
|
91 |
<Page Include="MainWindow.xaml"> |
|
92 |
<Generator>MSBuild:Compile</Generator> |
|
93 |
<SubType>Designer</SubType> |
|
94 |
</Page> |
|
95 |
<Compile Include="App.xaml.cs"> |
|
96 |
<DependentUpon>App.xaml</DependentUpon> |
|
97 |
<SubType>Code</SubType> |
|
98 |
</Compile> |
|
99 |
<Compile Include="MainWindow.xaml.cs"> |
|
100 |
<DependentUpon>MainWindow.xaml</DependentUpon> |
|
101 |
<SubType>Code</SubType> |
|
102 |
</Compile> |
|
103 |
<Page Include="ImageView.xaml"> |
|
104 |
<SubType>Designer</SubType> |
|
105 |
<Generator>MSBuild:Compile</Generator> |
|
106 |
</Page> |
|
107 |
</ItemGroup> |
|
108 |
<ItemGroup> |
|
109 |
<Compile Include="Properties\AssemblyInfo.cs"> |
|
110 |
<SubType>Code</SubType> |
|
111 |
</Compile> |
|
112 |
<Compile Include="ImageView.xaml.cs"> |
|
113 |
<DependentUpon>ImageView.xaml</DependentUpon> |
|
114 |
</Compile> |
|
115 |
<Compile Include="Properties\Resources.Designer.cs"> |
|
116 |
<AutoGen>True</AutoGen> |
|
117 |
<DesignTime>True</DesignTime> |
|
118 |
<DependentUpon>Resources.resx</DependentUpon> |
|
119 |
</Compile> |
|
120 |
<Compile Include="Properties\Settings.Designer.cs"> |
|
121 |
<AutoGen>True</AutoGen> |
|
122 |
<DependentUpon>Settings.settings</DependentUpon> |
|
123 |
<DesignTimeSharedInput>True</DesignTimeSharedInput> |
|
124 |
</Compile> |
|
125 |
<EmbeddedResource Include="Properties\Resources.resx"> |
|
126 |
<Generator>ResXFileCodeGenerator</Generator> |
|
127 |
<LastGenOutput>Resources.Designer.cs</LastGenOutput> |
|
128 |
</EmbeddedResource> |
|
129 |
<None Include="Properties\Settings.settings"> |
|
130 |
<Generator>SettingsSingleFileGenerator</Generator> |
|
131 |
<LastGenOutput>Settings.Designer.cs</LastGenOutput> |
|
132 |
</None> |
|
133 |
</ItemGroup> |
|
134 |
<ItemGroup> |
|
135 |
<None Include="App.config" /> |
|
136 |
</ItemGroup> |
|
137 |
<ItemGroup> |
|
138 |
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> |
|
139 |
<Visible>False</Visible> |
|
140 |
<ProductName>.NET Framework 3.5 SP1</ProductName> |
|
141 |
<Install>false</Install> |
|
142 |
</BootstrapperPackage> |
|
143 |
</ItemGroup> |
|
144 |
<ItemGroup> |
|
145 |
<ProjectReference Include="..\Markus.ImageComparer\Markus.ImageCompare.csproj"> |
|
146 |
<Project>{fd0e8645-8d75-4e5a-bbbb-9b62b07f8465}</Project> |
|
147 |
<Name>Markus.ImageCompare</Name> |
|
148 |
</ProjectReference> |
|
149 |
</ItemGroup> |
|
150 |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
151 |
</Project> |
ComparerTestWPF/ImageView.xaml | ||
---|---|---|
1 |
<Window x:Class="ComparerTestWPF.ImageView" |
|
2 |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|
3 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
4 |
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|
5 |
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|
6 |
xmlns:local="clr-namespace:ComparerTestWPF.Properties" |
|
7 |
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" |
|
8 |
mc:Ignorable="d" |
|
9 |
Title="ImageView" Height="450" Width="800"> |
|
10 |
<Grid> |
|
11 |
<telerik:RadImageEditor x:Name="image"/> |
|
12 |
</Grid> |
|
13 |
</Window> |
ComparerTestWPF/ImageView.xaml.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
using System.Windows; |
|
7 |
using System.Windows.Controls; |
|
8 |
using System.Windows.Data; |
|
9 |
using System.Windows.Documents; |
|
10 |
using System.Windows.Input; |
|
11 |
using System.Windows.Media; |
|
12 |
using System.Windows.Media.Imaging; |
|
13 |
using System.Windows.Shapes; |
|
14 |
|
|
15 |
namespace ComparerTestWPF |
|
16 |
{ |
|
17 |
/// <summary> |
|
18 |
/// ImageView.xaml에 대한 상호 작용 논리 |
|
19 |
/// </summary> |
|
20 |
public partial class ImageView : Window |
|
21 |
{ |
|
22 |
public ImageView(BitmapSource img) |
|
23 |
{ |
|
24 |
InitializeComponent(); |
|
25 |
|
|
26 |
this.image.Image = new Telerik.Windows.Media.Imaging.RadBitmap(img); |
|
27 |
} |
|
28 |
} |
|
29 |
} |
ComparerTestWPF/License-LGPL.txt | ||
---|---|---|
1 |
GNU LESSER GENERAL PUBLIC LICENSE |
|
2 |
Version 2.1, February 1999 |
|
3 |
|
|
4 |
Copyright (C) 1991, 1999 Free Software Foundation, Inc. |
|
5 |
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
6 |
Everyone is permitted to copy and distribute verbatim copies |
|
7 |
of this license document, but changing it is not allowed. |
|
8 |
|
|
9 |
[This is the first released version of the Lesser GPL. It also counts |
|
10 |
as the successor of the GNU Library Public License, version 2, hence |
|
11 |
the version number 2.1.] |
|
12 |
|
|
13 |
Preamble |
|
14 |
|
|
15 |
The licenses for most software are designed to take away your |
|
16 |
freedom to share and change it. By contrast, the GNU General Public |
|
17 |
Licenses are intended to guarantee your freedom to share and change |
|
18 |
free software--to make sure the software is free for all its users. |
|
19 |
|
|
20 |
This license, the Lesser General Public License, applies to some |
|
21 |
specially designated software packages--typically libraries--of the |
|
22 |
Free Software Foundation and other authors who decide to use it. You |
|
23 |
can use it too, but we suggest you first think carefully about whether |
|
24 |
this license or the ordinary General Public License is the better |
|
25 |
strategy to use in any particular case, based on the explanations below. |
|
26 |
|
|
27 |
When we speak of free software, we are referring to freedom of use, |
|
28 |
not price. Our General Public Licenses are designed to make sure that |
|
29 |
you have the freedom to distribute copies of free software (and charge |
|
30 |
for this service if you wish); that you receive source code or can get |
|
31 |
it if you want it; that you can change the software and use pieces of |
|
32 |
it in new free programs; and that you are informed that you can do |
|
33 |
these things. |
|
34 |
|
|
35 |
To protect your rights, we need to make restrictions that forbid |
|
36 |
distributors to deny you these rights or to ask you to surrender these |
|
37 |
rights. These restrictions translate to certain responsibilities for |
|
38 |
you if you distribute copies of the library or if you modify it. |
|
39 |
|
|
40 |
For example, if you distribute copies of the library, whether gratis |
|
41 |
or for a fee, you must give the recipients all the rights that we gave |
|
42 |
you. You must make sure that they, too, receive or can get the source |
|
43 |
code. If you link other code with the library, you must provide |
|
44 |
complete object files to the recipients, so that they can relink them |
|
45 |
with the library after making changes to the library and recompiling |
|
46 |
it. And you must show them these terms so they know their rights. |
|
47 |
|
|
48 |
We protect your rights with a two-step method: (1) we copyright the |
|
49 |
library, and (2) we offer you this license, which gives you legal |
|
50 |
permission to copy, distribute and/or modify the library. |
|
51 |
|
|
52 |
To protect each distributor, we want to make it very clear that |
|
53 |
there is no warranty for the free library. Also, if the library is |
|
54 |
modified by someone else and passed on, the recipients should know |
|
55 |
that what they have is not the original version, so that the original |
|
56 |
author's reputation will not be affected by problems that might be |
|
57 |
introduced by others. |
|
58 |
|
|
59 |
Finally, software patents pose a constant threat to the existence of |
|
60 |
any free program. We wish to make sure that a company cannot |
|
61 |
effectively restrict the users of a free program by obtaining a |
|
62 |
restrictive license from a patent holder. Therefore, we insist that |
|
63 |
any patent license obtained for a version of the library must be |
|
64 |
consistent with the full freedom of use specified in this license. |
|
65 |
|
|
66 |
Most GNU software, including some libraries, is covered by the |
|
67 |
ordinary GNU General Public License. This license, the GNU Lesser |
|
68 |
General Public License, applies to certain designated libraries, and |
|
69 |
is quite different from the ordinary General Public License. We use |
|
70 |
this license for certain libraries in order to permit linking those |
|
71 |
libraries into non-free programs. |
|
72 |
|
|
73 |
When a program is linked with a library, whether statically or using |
|
74 |
a shared library, the combination of the two is legally speaking a |
|
75 |
combined work, a derivative of the original library. The ordinary |
|
76 |
General Public License therefore permits such linking only if the |
|
77 |
entire combination fits its criteria of freedom. The Lesser General |
|
78 |
Public License permits more lax criteria for linking other code with |
|
79 |
the library. |
|
80 |
|
|
81 |
We call this license the "Lesser" General Public License because it |
|
82 |
does Less to protect the user's freedom than the ordinary General |
|
83 |
Public License. It also provides other free software developers Less |
|
84 |
of an advantage over competing non-free programs. These disadvantages |
|
85 |
are the reason we use the ordinary General Public License for many |
|
86 |
libraries. However, the Lesser license provides advantages in certain |
|
87 |
special circumstances. |
|
88 |
|
|
89 |
For example, on rare occasions, there may be a special need to |
|
90 |
encourage the widest possible use of a certain library, so that it becomes |
|
91 |
a de-facto standard. To achieve this, non-free programs must be |
|
92 |
allowed to use the library. A more frequent case is that a free |
|
93 |
library does the same job as widely used non-free libraries. In this |
|
94 |
case, there is little to gain by limiting the free library to free |
|
95 |
software only, so we use the Lesser General Public License. |
|
96 |
|
|
97 |
In other cases, permission to use a particular library in non-free |
|
98 |
programs enables a greater number of people to use a large body of |
|
99 |
free software. For example, permission to use the GNU C Library in |
|
100 |
non-free programs enables many more people to use the whole GNU |
|
101 |
operating system, as well as its variant, the GNU/Linux operating |
|
102 |
system. |
|
103 |
|
|
104 |
Although the Lesser General Public License is Less protective of the |
|
105 |
users' freedom, it does ensure that the user of a program that is |
|
106 |
linked with the Library has the freedom and the wherewithal to run |
|
107 |
that program using a modified version of the Library. |
|
108 |
|
|
109 |
The precise terms and conditions for copying, distribution and |
|
110 |
modification follow. Pay close attention to the difference between a |
|
111 |
"work based on the library" and a "work that uses the library". The |
|
112 |
former contains code derived from the library, whereas the latter must |
|
113 |
be combined with the library in order to run. |
|
114 |
|
|
115 |
GNU LESSER GENERAL PUBLIC LICENSE |
|
116 |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
|
117 |
|
|
118 |
0. This License Agreement applies to any software library or other |
|
119 |
program which contains a notice placed by the copyright holder or |
|
120 |
other authorized party saying it may be distributed under the terms of |
|
121 |
this Lesser General Public License (also called "this License"). |
|
122 |
Each licensee is addressed as "you". |
|
123 |
|
|
124 |
A "library" means a collection of software functions and/or data |
|
125 |
prepared so as to be conveniently linked with application programs |
|
126 |
(which use some of those functions and data) to form executables. |
|
127 |
|
|
128 |
The "Library", below, refers to any such software library or work |
|
129 |
which has been distributed under these terms. A "work based on the |
|
130 |
Library" means either the Library or any derivative work under |
|
131 |
copyright law: that is to say, a work containing the Library or a |
|
132 |
portion of it, either verbatim or with modifications and/or translated |
|
133 |
straightforwardly into another language. (Hereinafter, translation is |
|
134 |
included without limitation in the term "modification".) |
|
135 |
|
|
136 |
"Source code" for a work means the preferred form of the work for |
|
137 |
making modifications to it. For a library, complete source code means |
|
138 |
all the source code for all modules it contains, plus any associated |
|
139 |
interface definition files, plus the scripts used to control compilation |
|
140 |
and installation of the library. |
|
141 |
|
|
142 |
Activities other than copying, distribution and modification are not |
|
143 |
covered by this License; they are outside its scope. The act of |
|
144 |
running a program using the Library is not restricted, and output from |
|
145 |
such a program is covered only if its contents constitute a work based |
|
146 |
on the Library (independent of the use of the Library in a tool for |
|
147 |
writing it). Whether that is true depends on what the Library does |
|
148 |
and what the program that uses the Library does. |
|
149 |
|
|
150 |
1. You may copy and distribute verbatim copies of the Library's |
|
151 |
complete source code as you receive it, in any medium, provided that |
|
152 |
you conspicuously and appropriately publish on each copy an |
|
153 |
appropriate copyright notice and disclaimer of warranty; keep intact |
|
154 |
all the notices that refer to this License and to the absence of any |
|
155 |
warranty; and distribute a copy of this License along with the |
|
156 |
Library. |
|
157 |
|
|
158 |
You may charge a fee for the physical act of transferring a copy, |
|
159 |
and you may at your option offer warranty protection in exchange for a |
|
160 |
fee. |
|
161 |
|
|
162 |
2. You may modify your copy or copies of the Library or any portion |
|
163 |
of it, thus forming a work based on the Library, and copy and |
|
164 |
distribute such modifications or work under the terms of Section 1 |
|
165 |
above, provided that you also meet all of these conditions: |
|
166 |
|
|
167 |
a) The modified work must itself be a software library. |
|
168 |
|
|
169 |
b) You must cause the files modified to carry prominent notices |
|
170 |
stating that you changed the files and the date of any change. |
|
171 |
|
|
172 |
c) You must cause the whole of the work to be licensed at no |
|
173 |
charge to all third parties under the terms of this License. |
|
174 |
|
|
175 |
d) If a facility in the modified Library refers to a function or a |
|
176 |
table of data to be supplied by an application program that uses |
|
177 |
the facility, other than as an argument passed when the facility |
|
178 |
is invoked, then you must make a good faith effort to ensure that, |
|
179 |
in the event an application does not supply such function or |
|
180 |
table, the facility still operates, and performs whatever part of |
|
181 |
its purpose remains meaningful. |
|
182 |
|
|
183 |
(For example, a function in a library to compute square roots has |
|
184 |
a purpose that is entirely well-defined independent of the |
|
185 |
application. Therefore, Subsection 2d requires that any |
|
186 |
application-supplied function or table used by this function must |
|
187 |
be optional: if the application does not supply it, the square |
|
188 |
root function must still compute square roots.) |
|
189 |
|
|
190 |
These requirements apply to the modified work as a whole. If |
|
191 |
identifiable sections of that work are not derived from the Library, |
|
192 |
and can be reasonably considered independent and separate works in |
|
193 |
themselves, then this License, and its terms, do not apply to those |
|
194 |
sections when you distribute them as separate works. But when you |
|
195 |
distribute the same sections as part of a whole which is a work based |
|
196 |
on the Library, the distribution of the whole must be on the terms of |
|
197 |
this License, whose permissions for other licensees extend to the |
|
198 |
entire whole, and thus to each and every part regardless of who wrote |
|
199 |
it. |
|
200 |
|
|
201 |
Thus, it is not the intent of this section to claim rights or contest |
|
202 |
your rights to work written entirely by you; rather, the intent is to |
|
203 |
exercise the right to control the distribution of derivative or |
|
204 |
collective works based on the Library. |
|
205 |
|
|
206 |
In addition, mere aggregation of another work not based on the Library |
|
207 |
with the Library (or with a work based on the Library) on a volume of |
|
208 |
a storage or distribution medium does not bring the other work under |
|
209 |
the scope of this License. |
|
210 |
|
|
211 |
3. You may opt to apply the terms of the ordinary GNU General Public |
|
212 |
License instead of this License to a given copy of the Library. To do |
|
213 |
this, you must alter all the notices that refer to this License, so |
|
214 |
that they refer to the ordinary GNU General Public License, version 2, |
|
215 |
instead of to this License. (If a newer version than version 2 of the |
|
216 |
ordinary GNU General Public License has appeared, then you can specify |
|
217 |
that version instead if you wish.) Do not make any other change in |
|
218 |
these notices. |
|
219 |
|
|
220 |
Once this change is made in a given copy, it is irreversible for |
|
221 |
that copy, so the ordinary GNU General Public License applies to all |
|
222 |
subsequent copies and derivative works made from that copy. |
|
223 |
|
|
224 |
This option is useful when you wish to copy part of the code of |
|
225 |
the Library into a program that is not a library. |
|
226 |
|
|
227 |
4. You may copy and distribute the Library (or a portion or |
|
228 |
derivative of it, under Section 2) in object code or executable form |
|
229 |
under the terms of Sections 1 and 2 above provided that you accompany |
|
230 |
it with the complete corresponding machine-readable source code, which |
|
231 |
must be distributed under the terms of Sections 1 and 2 above on a |
|
232 |
medium customarily used for software interchange. |
|
233 |
|
|
234 |
If distribution of object code is made by offering access to copy |
|
235 |
from a designated place, then offering equivalent access to copy the |
|
236 |
source code from the same place satisfies the requirement to |
|
237 |
distribute the source code, even though third parties are not |
|
238 |
compelled to copy the source along with the object code. |
|
239 |
|
|
240 |
5. A program that contains no derivative of any portion of the |
|
241 |
Library, but is designed to work with the Library by being compiled or |
|
242 |
linked with it, is called a "work that uses the Library". Such a |
|
243 |
work, in isolation, is not a derivative work of the Library, and |
|
244 |
therefore falls outside the scope of this License. |
|
245 |
|
|
246 |
However, linking a "work that uses the Library" with the Library |
|
247 |
creates an executable that is a derivative of the Library (because it |
|
248 |
contains portions of the Library), rather than a "work that uses the |
|
249 |
library". The executable is therefore covered by this License. |
|
250 |
Section 6 states terms for distribution of such executables. |
|
251 |
|
|
252 |
When a "work that uses the Library" uses material from a header file |
|
253 |
that is part of the Library, the object code for the work may be a |
|
254 |
derivative work of the Library even though the source code is not. |
|
255 |
Whether this is true is especially significant if the work can be |
|
256 |
linked without the Library, or if the work is itself a library. The |
|
257 |
threshold for this to be true is not precisely defined by law. |
|
258 |
|
|
259 |
If such an object file uses only numerical parameters, data |
|
260 |
structure layouts and accessors, and small macros and small inline |
|
261 |
functions (ten lines or less in length), then the use of the object |
|
262 |
file is unrestricted, regardless of whether it is legally a derivative |
|
263 |
work. (Executables containing this object code plus portions of the |
|
264 |
Library will still fall under Section 6.) |
|
265 |
|
|
266 |
Otherwise, if the work is a derivative of the Library, you may |
|
267 |
distribute the object code for the work under the terms of Section 6. |
|
268 |
Any executables containing that work also fall under Section 6, |
|
269 |
whether or not they are linked directly with the Library itself. |
|
270 |
|
|
271 |
6. As an exception to the Sections above, you may also combine or |
|
272 |
link a "work that uses the Library" with the Library to produce a |
|
273 |
work containing portions of the Library, and distribute that work |
|
274 |
under terms of your choice, provided that the terms permit |
|
275 |
modification of the work for the customer's own use and reverse |
|
276 |
engineering for debugging such modifications. |
|
277 |
|
|
278 |
You must give prominent notice with each copy of the work that the |
|
279 |
Library is used in it and that the Library and its use are covered by |
|
280 |
this License. You must supply a copy of this License. If the work |
|
281 |
during execution displays copyright notices, you must include the |
|
282 |
copyright notice for the Library among them, as well as a reference |
|
283 |
directing the user to the copy of this License. Also, you must do one |
|
284 |
of these things: |
|
285 |
|
|
286 |
a) Accompany the work with the complete corresponding |
|
287 |
machine-readable source code for the Library including whatever |
|
288 |
changes were used in the work (which must be distributed under |
|
289 |
Sections 1 and 2 above); and, if the work is an executable linked |
|
290 |
with the Library, with the complete machine-readable "work that |
|
291 |
uses the Library", as object code and/or source code, so that the |
|
292 |
user can modify the Library and then relink to produce a modified |
|
293 |
executable containing the modified Library. (It is understood |
|
294 |
that the user who changes the contents of definitions files in the |
|
295 |
Library will not necessarily be able to recompile the application |
|
296 |
to use the modified definitions.) |
|
297 |
|
|
298 |
b) Use a suitable shared library mechanism for linking with the |
|
299 |
Library. A suitable mechanism is one that (1) uses at run time a |
|
300 |
copy of the library already present on the user's computer system, |
|
301 |
rather than copying library functions into the executable, and (2) |
|
302 |
will operate properly with a modified version of the library, if |
|
303 |
the user installs one, as long as the modified version is |
|
304 |
interface-compatible with the version that the work was made with. |
|
305 |
|
|
306 |
c) Accompany the work with a written offer, valid for at |
|
307 |
least three years, to give the same user the materials |
|
308 |
specified in Subsection 6a, above, for a charge no more |
|
309 |
than the cost of performing this distribution. |
|
310 |
|
|
311 |
d) If distribution of the work is made by offering access to copy |
|
312 |
from a designated place, offer equivalent access to copy the above |
|
313 |
specified materials from the same place. |
|
314 |
|
|
315 |
e) Verify that the user has already received a copy of these |
|
316 |
materials or that you have already sent this user a copy. |
|
317 |
|
|
318 |
For an executable, the required form of the "work that uses the |
|
319 |
Library" must include any data and utility programs needed for |
|
320 |
reproducing the executable from it. However, as a special exception, |
|
321 |
the materials to be distributed need not include anything that is |
|
322 |
normally distributed (in either source or binary form) with the major |
|
323 |
components (compiler, kernel, and so on) of the operating system on |
|
324 |
which the executable runs, unless that component itself accompanies |
|
325 |
the executable. |
|
326 |
|
|
327 |
It may happen that this requirement contradicts the license |
|
328 |
restrictions of other proprietary libraries that do not normally |
|
329 |
accompany the operating system. Such a contradiction means you cannot |
|
330 |
use both them and the Library together in an executable that you |
|
331 |
distribute. |
|
332 |
|
|
333 |
7. You may place library facilities that are a work based on the |
|
334 |
Library side-by-side in a single library together with other library |
|
335 |
facilities not covered by this License, and distribute such a combined |
|
336 |
library, provided that the separate distribution of the work based on |
|
337 |
the Library and of the other library facilities is otherwise |
|
338 |
permitted, and provided that you do these two things: |
|
339 |
|
|
340 |
a) Accompany the combined library with a copy of the same work |
|
341 |
based on the Library, uncombined with any other library |
|
342 |
facilities. This must be distributed under the terms of the |
|
343 |
Sections above. |
|
344 |
|
|
345 |
b) Give prominent notice with the combined library of the fact |
|
346 |
that part of it is a work based on the Library, and explaining |
|
347 |
where to find the accompanying uncombined form of the same work. |
|
348 |
|
|
349 |
8. You may not copy, modify, sublicense, link with, or distribute |
|
350 |
the Library except as expressly provided under this License. Any |
|
351 |
attempt otherwise to copy, modify, sublicense, link with, or |
|
352 |
distribute the Library is void, and will automatically terminate your |
|
353 |
rights under this License. However, parties who have received copies, |
|
354 |
or rights, from you under this License will not have their licenses |
|
355 |
terminated so long as such parties remain in full compliance. |
|
356 |
|
|
357 |
9. You are not required to accept this License, since you have not |
|
358 |
signed it. However, nothing else grants you permission to modify or |
|
359 |
distribute the Library or its derivative works. These actions are |
|
360 |
prohibited by law if you do not accept this License. Therefore, by |
|
361 |
modifying or distributing the Library (or any work based on the |
|
362 |
Library), you indicate your acceptance of this License to do so, and |
|
363 |
all its terms and conditions for copying, distributing or modifying |
|
364 |
the Library or works based on it. |
|
365 |
|
|
366 |
10. Each time you redistribute the Library (or any work based on the |
|
367 |
Library), the recipient automatically receives a license from the |
|
368 |
original licensor to copy, distribute, link with or modify the Library |
|
369 |
subject to these terms and conditions. You may not impose any further |
|
370 |
restrictions on the recipients' exercise of the rights granted herein. |
|
371 |
You are not responsible for enforcing compliance by third parties with |
|
372 |
this License. |
|
373 |
|
|
374 |
11. If, as a consequence of a court judgment or allegation of patent |
|
375 |
infringement or for any other reason (not limited to patent issues), |
|
376 |
conditions are imposed on you (whether by court order, agreement or |
|
377 |
otherwise) that contradict the conditions of this License, they do not |
|
378 |
excuse you from the conditions of this License. If you cannot |
|
379 |
distribute so as to satisfy simultaneously your obligations under this |
|
380 |
License and any other pertinent obligations, then as a consequence you |
|
381 |
may not distribute the Library at all. For example, if a patent |
|
382 |
license would not permit royalty-free redistribution of the Library by |
|
383 |
all those who receive copies directly or indirectly through you, then |
|
384 |
the only way you could satisfy both it and this License would be to |
|
385 |
refrain entirely from distribution of the Library. |
|
386 |
|
|
387 |
If any portion of this section is held invalid or unenforceable under any |
|
388 |
particular circumstance, the balance of the section is intended to apply, |
|
389 |
and the section as a whole is intended to apply in other circumstances. |
|
390 |
|
|
391 |
It is not the purpose of this section to induce you to infringe any |
|
392 |
patents or other property right claims or to contest validity of any |
|
393 |
such claims; this section has the sole purpose of protecting the |
|
394 |
integrity of the free software distribution system which is |
|
395 |
implemented by public license practices. Many people have made |
|
396 |
generous contributions to the wide range of software distributed |
|
397 |
through that system in reliance on consistent application of that |
|
398 |
system; it is up to the author/donor to decide if he or she is willing |
|
399 |
to distribute software through any other system and a licensee cannot |
|
400 |
impose that choice. |
|
401 |
|
|
402 |
This section is intended to make thoroughly clear what is believed to |
|
403 |
be a consequence of the rest of this License. |
|
404 |
|
|
405 |
12. If the distribution and/or use of the Library is restricted in |
|
406 |
certain countries either by patents or by copyrighted interfaces, the |
|
407 |
original copyright holder who places the Library under this License may add |
|
408 |
an explicit geographical distribution limitation excluding those countries, |
|
409 |
so that distribution is permitted only in or among countries not thus |
|
410 |
excluded. In such case, this License incorporates the limitation as if |
|
411 |
written in the body of this License. |
|
412 |
|
|
413 |
13. The Free Software Foundation may publish revised and/or new |
|
414 |
versions of the Lesser General Public License from time to time. |
|
415 |
Such new versions will be similar in spirit to the present version, |
|
416 |
but may differ in detail to address new problems or concerns. |
|
417 |
|
|
418 |
Each version is given a distinguishing version number. If the Library |
|
419 |
specifies a version number of this License which applies to it and |
|
420 |
"any later version", you have the option of following the terms and |
|
421 |
conditions either of that version or of any later version published by |
|
422 |
the Free Software Foundation. If the Library does not specify a |
|
423 |
license version number, you may choose any version ever published by |
|
424 |
the Free Software Foundation. |
|
425 |
|
|
426 |
14. If you wish to incorporate parts of the Library into other free |
|
427 |
programs whose distribution conditions are incompatible with these, |
|
428 |
write to the author to ask for permission. For software which is |
|
429 |
copyrighted by the Free Software Foundation, write to the Free |
|
430 |
Software Foundation; we sometimes make exceptions for this. Our |
|
431 |
decision will be guided by the two goals of preserving the free status |
|
432 |
of all derivatives of our free software and of promoting the sharing |
|
433 |
and reuse of software generally. |
|
434 |
|
|
435 |
NO WARRANTY |
|
436 |
|
|
437 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
|
438 |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
|
439 |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
|
440 |
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY |
|
441 |
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE |
|
442 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
443 |
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE |
|
444 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
|
445 |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
|
446 |
|
|
447 |
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN |
|
448 |
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY |
|
449 |
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU |
|
450 |
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR |
|
451 |
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE |
|
452 |
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING |
|
453 |
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A |
|
454 |
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF |
|
455 |
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
|
456 |
DAMAGES. |
|
457 |
|
|
458 |
END OF TERMS AND CONDITIONS |
|
459 |
|
|
460 |
How to Apply These Terms to Your New Libraries |
|
461 |
|
|
462 |
If you develop a new library, and you want it to be of the greatest |
|
463 |
possible use to the public, we recommend making it free software that |
|
464 |
everyone can redistribute and change. You can do so by permitting |
|
465 |
redistribution under these terms (or, alternatively, under the terms of the |
|
466 |
ordinary General Public License). |
|
467 |
|
|
468 |
To apply these terms, attach the following notices to the library. It is |
|
469 |
safest to attach them to the start of each source file to most effectively |
|
470 |
convey the exclusion of warranty; and each file should have at least the |
|
471 |
"copyright" line and a pointer to where the full notice is found. |
|
472 |
|
|
473 |
<one line to give the library's name and a brief idea of what it does.> |
|
474 |
Copyright (C) <year> <name of author> |
|
475 |
|
|
476 |
This library is free software; you can redistribute it and/or |
|
477 |
modify it under the terms of the GNU Lesser General Public |
|
478 |
License as published by the Free Software Foundation; either |
|
479 |
version 2.1 of the License, or (at your option) any later version. |
|
480 |
|
|
481 |
This library is distributed in the hope that it will be useful, |
|
482 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
483 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
484 |
Lesser General Public License for more details. |
|
485 |
|
|
486 |
You should have received a copy of the GNU Lesser General Public |
|
487 |
License along with this library; if not, write to the Free Software |
|
488 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
489 |
|
|
490 |
Also add information on how to contact you by electronic and paper mail. |
|
491 |
|
|
492 |
You should also get your employer (if you work as a programmer) or your |
|
493 |
school, if any, to sign a "copyright disclaimer" for the library, if |
|
494 |
necessary. Here is a sample; alter the names: |
|
495 |
|
|
496 |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
|
497 |
library `Frob' (a library for tweaking knobs) written by James Random Hacker. |
|
498 |
|
|
499 |
<signature of Ty Coon>, 1 April 1990 |
|
500 |
Ty Coon, President of Vice |
|
501 |
|
|
502 |
That's all there is to it! |
|
503 |
|
|
504 |
|
|
505 |
|
|
506 |
|
ComparerTestWPF/MainWindow.xaml | ||
---|---|---|
1 |
<Window x:Class="ComparerTestWPF.MainWindow" |
|
2 |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|
3 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
4 |
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|
5 |
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|
6 |
xmlns:local="clr-namespace:ComparerTestWPF" |
|
7 |
mc:Ignorable="d" |
|
8 |
Title="MainWindow" Height="450" Width="800"> |
|
9 |
<Grid> |
|
10 |
<Grid.RowDefinitions> |
|
11 |
<RowDefinition Height="Auto"/> |
|
12 |
<RowDefinition/> |
|
13 |
<RowDefinition/> |
|
14 |
</Grid.RowDefinitions> |
|
15 |
<StackPanel> |
|
16 |
<StackPanel.Resources> |
|
17 |
<Style TargetType="TextBlock"> |
|
18 |
<Setter Property="FontSize" Value="20"/> |
|
19 |
</Style> |
|
20 |
<Style TargetType="TextBox"> |
|
21 |
<Setter Property="FontSize" Value="20"/> |
|
22 |
<Setter Property="MinWidth" Value="400"/> |
|
23 |
</Style> |
|
24 |
</StackPanel.Resources> |
|
25 |
<TextBlock Text="비교 대상 이미지 선택"/> |
|
26 |
<StackPanel Orientation="Horizontal"> |
|
27 |
<TextBlock Text="원본 "/> |
|
28 |
<TextBox x:Name="TxtOriginalImage"/> |
|
29 |
<Button Content="찾기" Click="btFindOriginalFile_click"/> |
|
30 |
</StackPanel> |
|
31 |
<StackPanel Orientation="Horizontal"> |
|
32 |
<TextBlock Text="비교대상 "/> |
|
33 |
<TextBox x:Name="TxtTargetImage"/> |
|
34 |
<Button Content="찾기" Click="btFindTargetFile_click"/> |
|
35 |
</StackPanel> |
|
36 |
</StackPanel> |
|
37 |
<Grid Height="100" Width="200" Grid.Row="1"> |
|
38 |
<Grid.RowDefinitions> |
|
39 |
<RowDefinition/> |
|
40 |
<RowDefinition/> |
|
41 |
<RowDefinition/> |
|
42 |
</Grid.RowDefinitions> |
|
43 |
<Button Content="동기 이미지 비교" Click="btNoneTask_Click"/> |
|
44 |
<Button Content="비동기 이미지 비교" Grid.Row="1" Click="btTask_Click"/> |
|
45 |
<Button Content="비동기 URI 이미지 비교" Grid.Row="2" Click="btTaskUri_Click"/> |
|
46 |
</Grid> |
|
47 |
<Grid Grid.Row="2"> |
|
48 |
<Grid.ColumnDefinitions> |
|
49 |
<ColumnDefinition/> |
|
50 |
<ColumnDefinition/> |
|
51 |
</Grid.ColumnDefinitions> |
|
52 |
<DataGrid x:Name="lstView"/> |
|
53 |
<DataGrid x:Name="lstView2" Grid.Column="1"/> |
|
54 |
</Grid> |
|
55 |
</Grid> |
|
56 |
</Window> |
ComparerTestWPF/MainWindow.xaml.cs | ||
---|---|---|
1 |
using Microsoft.Win32; |
|
2 |
using System; |
|
3 |
using System.Collections.Generic; |
|
4 |
using System.Linq; |
|
5 |
using System.Text; |
|
6 |
using System.Threading.Tasks; |
|
7 |
using System.Windows; |
|
8 |
using System.Windows.Controls; |
|
9 |
using System.Windows.Data; |
|
10 |
using System.Windows.Documents; |
|
11 |
using System.Windows.Input; |
|
12 |
using System.Windows.Media; |
|
13 |
using System.Windows.Media.Imaging; |
|
14 |
using System.Windows.Navigation; |
|
15 |
using System.Windows.Shapes; |
|
16 |
|
|
17 |
namespace ComparerTestWPF |
|
18 |
{ |
|
19 |
/// <summary> |
|
20 |
/// MainWindow.xaml에 대한 상호 작용 논리 |
|
21 |
/// </summary> |
|
22 |
public partial class MainWindow : Window |
|
23 |
{ |
내보내기 Unified diff