ImageMenu.cs 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253
  1. using PaintDotNet.Base;
  2. using PaintDotNet.Data.Param;
  3. using PaintDotNet.Processing;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Windows.Forms;
  7. namespace PaintDotNet.Menus
  8. {
  9. /// <summary>
  10. /// 图像处理菜单
  11. /// </summary>
  12. internal sealed class ImageMenu : PdnMenuItem
  13. {
  14. private PdnMenuItem menuImageAdjust;
  15. private PdnMenuItem menuImageSharpen;
  16. private PdnMenuItem menuImageSmooth;
  17. private ToolStripSeparator menuImageSeparator1;
  18. private PdnMenuItem menuImageEdgeDetection;
  19. private PdnMenuItem menuImageInterOperation;
  20. private ToolStripSeparator menuImageSeparator2;
  21. private PdnMenuItem menuImageShift;
  22. private PdnMenuItem menuImageStitching;
  23. private PdnMenuItem menuImageDepthExtension;
  24. //反色
  25. private PdnMenuItem menuImageReverseColor;
  26. //灰度化
  27. private PdnMenuItem menuImageGrayscale;
  28. //白平衡
  29. private PdnMenuItem menuImageWhiteBalance;
  30. //色彩平衡
  31. private PdnMenuItem menuImageColorBalance;
  32. //阴影校正
  33. private PdnMenuItem menuImageShadingCorrection;
  34. //色度/饱和度/亮度
  35. private PdnMenuItem menuImageHSLAdjust;
  36. //亮度/对比度/伽马值
  37. private PdnMenuItem menuImageBCGAdjust;
  38. //图像旋转
  39. private PdnMenuItem menuImageRotate;
  40. //描绘
  41. private PdnMenuItem menuImagePortray;
  42. //加强轮廓
  43. private PdnMenuItem menuImageEnhanceContour;
  44. //虚化蒙版
  45. private PdnMenuItem menuImageBlurMask;
  46. //西格玛
  47. private PdnMenuItem menuImageSigma;
  48. //各向异性高斯滤波
  49. private PdnMenuItem menuImageGaussianFiltering;
  50. //低通滤波
  51. private PdnMenuItem menuImageLowPassFiltering;
  52. //中值滤波
  53. private PdnMenuItem menuImageMedianFiltering;
  54. //高斯模糊
  55. private PdnMenuItem menuImageGaussianBlur;
  56. //双边滤波
  57. private PdnMenuItem menuImageBilateralFiltering;
  58. //小波降噪
  59. private PdnMenuItem menuImageWaveletDenoising;
  60. //Log
  61. private PdnMenuItem menuImageLog;
  62. //Canny
  63. private PdnMenuItem menuImageCanny;
  64. //Sobel
  65. private PdnMenuItem menuImageSobel;
  66. //Kirsch
  67. private PdnMenuItem menuImageKirsch;
  68. //Prewitt
  69. private PdnMenuItem menuImagePrewitt;
  70. //Roberts
  71. private PdnMenuItem menuImageRoberts;
  72. //Laplace
  73. private PdnMenuItem menuImageLaplace;
  74. //增加
  75. private PdnMenuItem menuImageAddition;
  76. //减去
  77. private PdnMenuItem menuImageSubtraction;
  78. //乘以
  79. private PdnMenuItem menuImageMultiplication;
  80. //除以
  81. private PdnMenuItem menuImageDivision;
  82. //平均
  83. private PdnMenuItem menuImageAverage;
  84. //平方
  85. private PdnMenuItem menuImageSquare;
  86. //平方根
  87. private PdnMenuItem menuImageSquareRoot;
  88. //对数
  89. private PdnMenuItem menuImageLogarithm;
  90. //指数
  91. private PdnMenuItem menuImageIndex;
  92. //最大值
  93. private PdnMenuItem menuImageMax;
  94. //最小值
  95. private PdnMenuItem menuImageMin;
  96. public ImageMenu(int menuId)
  97. {
  98. InitializeComponent();
  99. this.MenuId = menuId;
  100. }
  101. private void InitializeComponent()
  102. {
  103. this.menuImageAdjust = new PdnMenuItem(ActionType.Adjust);
  104. this.menuImageSharpen = new PdnMenuItem(ActionType.Sharpen);
  105. this.menuImageSmooth = new PdnMenuItem(ActionType.Smooth);
  106. this.menuImageSeparator1 = new ToolStripSeparator();
  107. this.menuImageEdgeDetection = new PdnMenuItem(ActionType.EdgeDetection);
  108. this.menuImageInterOperation = new PdnMenuItem(ActionType.InterImageOperation);
  109. this.menuImageSeparator2 = new ToolStripSeparator();
  110. this.menuImageShift = new PdnMenuItem(ActionType.ActionImageOffset);
  111. this.menuImageStitching = new PdnMenuItem(ActionType.ActionImageStitching);
  112. this.menuImageStitching.AutomaticScript = false;
  113. this.menuImageDepthExtension = new PdnMenuItem(ActionType.ActionExtendedDepthOfFocus);
  114. this.menuImageDepthExtension.AutomaticScript = false;
  115. this.menuImageReverseColor = new PdnMenuItem(ActionType.ActionRevertColor);
  116. this.menuImageGrayscale = new PdnMenuItem(ActionType.ActionBgr2Gray);
  117. this.menuImageWhiteBalance = new PdnMenuItem(ActionType.ActionWhiteBalance);
  118. this.menuImageColorBalance = new PdnMenuItem(ActionType.ActionColorBalance);
  119. this.menuImageShadingCorrection = new PdnMenuItem(ActionType.ActionShadingCorrection);
  120. this.menuImageHSLAdjust = new PdnMenuItem(ActionType.ActionHSB);
  121. this.menuImageBCGAdjust = new PdnMenuItem(ActionType.ActionBCG);
  122. this.menuImageRotate = new PdnMenuItem(ActionType.ActionImageRotate);
  123. this.menuImagePortray = new PdnMenuItem(ActionType.ActionPortray);
  124. this.menuImageEnhanceContour = new PdnMenuItem(ActionType.ActionEnhanceContour);
  125. this.menuImageBlurMask = new PdnMenuItem(ActionType.ActionBlurMask);
  126. this.menuImageSigma = new PdnMenuItem(ActionType.Sigma);
  127. this.menuImageGaussianFiltering = new PdnMenuItem(ActionType.GaussianFiltering);
  128. this.menuImageLowPassFiltering = new PdnMenuItem(ActionType.LowPassFiltering);
  129. this.menuImageMedianFiltering = new PdnMenuItem(ActionType.MedianFiltering);
  130. this.menuImageGaussianBlur = new PdnMenuItem(ActionType.GaussianBlur);
  131. this.menuImageBilateralFiltering = new PdnMenuItem(ActionType.BilateralFiltering);
  132. this.menuImageWaveletDenoising = new PdnMenuItem(ActionType.WaveletDenoising);
  133. this.menuImageLog = new PdnMenuItem(ActionType.Log);
  134. this.menuImageCanny = new PdnMenuItem(ActionType.Canny);
  135. this.menuImageSobel = new PdnMenuItem(ActionType.Sobel);
  136. this.menuImageKirsch = new PdnMenuItem(ActionType.Kirsch);
  137. this.menuImagePrewitt = new PdnMenuItem(ActionType.Prewitt);
  138. this.menuImageRoberts = new PdnMenuItem(ActionType.Roberts);
  139. this.menuImageLaplace = new PdnMenuItem(ActionType.Laplace);
  140. this.menuImageAddition = new PdnMenuItem(ActionType.ActionImageAddition);
  141. this.menuImageAddition.AutomaticScript = false;
  142. this.menuImageSubtraction = new PdnMenuItem(ActionType.ActionImageSubtraction);
  143. this.menuImageSubtraction.AutomaticScript = false;
  144. this.menuImageMultiplication = new PdnMenuItem(ActionType.ActionImageMultiplication);
  145. this.menuImageMultiplication.AutomaticScript = false;
  146. this.menuImageDivision = new PdnMenuItem(ActionType.ActionImageDivision);
  147. this.menuImageDivision.AutomaticScript = false;
  148. this.menuImageAverage = new PdnMenuItem(ActionType.ActionImageAverage);
  149. this.menuImageAverage.AutomaticScript = false;
  150. this.menuImageSquare = new PdnMenuItem(ActionType.ActionImageSquare);
  151. //this.menuImageSquare.AutomaticScript = false;
  152. this.menuImageSquareRoot = new PdnMenuItem(ActionType.ActionImageSquareBoot);
  153. //this.menuImageSquareRoot.AutomaticScript = false;
  154. this.menuImageLogarithm = new PdnMenuItem(ActionType.ActionImageLogarithm);
  155. //this.menuImageLogarithm.AutomaticScript = false;
  156. this.menuImageIndex = new PdnMenuItem(ActionType.ActionImageIndex);
  157. //this.menuImageIndex.AutomaticScript = false;
  158. this.menuImageMax = new PdnMenuItem(ActionType.ActionImageMax);
  159. this.menuImageMax.AutomaticScript = false;
  160. this.menuImageMin = new PdnMenuItem(ActionType.ActionImageMin);
  161. this.menuImageMin.AutomaticScript = false;
  162. //
  163. // ImageMenu
  164. //
  165. this.DropDownItems.AddRange(
  166. new ToolStripItem[]
  167. {
  168. this.menuImageAdjust,
  169. this.menuImageSharpen,
  170. this.menuImageSmooth,
  171. this.menuImageSeparator1,
  172. this.menuImageEdgeDetection,
  173. this.menuImageInterOperation,
  174. this.menuImageSeparator2,
  175. this.menuImageShift,
  176. this.menuImageStitching,
  177. this.menuImageDepthExtension
  178. });
  179. this.Name = "Menu.Image";
  180. this.Text = PdnResources.GetString("Menu.Image.Text");
  181. //
  182. // 调节
  183. //
  184. this.menuImageAdjust.DropDownItems.AddRange(
  185. new ToolStripItem[]
  186. {
  187. this.menuImageReverseColor,
  188. this.menuImageGrayscale,
  189. this.menuImageWhiteBalance,
  190. this.menuImageColorBalance,
  191. this.menuImageShadingCorrection,
  192. this.menuImageHSLAdjust,
  193. this.menuImageBCGAdjust,
  194. this.menuImageRotate
  195. });
  196. //
  197. // 锐化
  198. //
  199. this.menuImageSharpen.DropDownItems.AddRange(
  200. new ToolStripItem[]
  201. {
  202. this.menuImagePortray,
  203. this.menuImageEnhanceContour,
  204. this.menuImageBlurMask
  205. });
  206. //
  207. // 平滑
  208. //
  209. this.menuImageSmooth.DropDownItems.AddRange(
  210. new ToolStripItem[]
  211. {
  212. this.menuImageSigma,
  213. this.menuImageGaussianFiltering,
  214. this.menuImageLowPassFiltering,
  215. this.menuImageMedianFiltering,
  216. this.menuImageGaussianBlur,
  217. this.menuImageBilateralFiltering,
  218. this.menuImageWaveletDenoising
  219. });
  220. //
  221. // 边缘检测
  222. //
  223. this.menuImageEdgeDetection.DropDownItems.AddRange(
  224. new ToolStripItem[]
  225. {
  226. this.menuImageLog,
  227. this. menuImageCanny,
  228. this.menuImageSobel,
  229. this.menuImageKirsch,
  230. this.menuImagePrewitt,
  231. this.menuImageRoberts,
  232. this.menuImageLaplace
  233. });
  234. //
  235. // 图像间操作
  236. //
  237. this.menuImageInterOperation.DropDownItems.AddRange(
  238. new ToolStripItem[]
  239. {
  240. this.menuImageAddition,
  241. this.menuImageSubtraction,
  242. this.menuImageMultiplication,
  243. this.menuImageDivision,
  244. this.menuImageAverage,
  245. this.menuImageSquare,
  246. this.menuImageSquareRoot,
  247. this.menuImageLogarithm,
  248. this.menuImageIndex,
  249. this.menuImageMax,
  250. this.menuImageMin
  251. });
  252. //
  253. // 图像偏移
  254. //
  255. this.menuImageShift.Click += new EventHandler(menuImageShift_Click);
  256. //
  257. // 图像拼接
  258. //
  259. this.menuImageStitching.Click += new EventHandler(menuImageStitching_Click);
  260. //
  261. // 景深扩展
  262. //
  263. this.menuImageDepthExtension.Click += new EventHandler(MenuImageDepthExtension_Click);
  264. //
  265. // 以下是子菜单
  266. //
  267. //
  268. // 反色
  269. //
  270. this.menuImageReverseColor.Click += new EventHandler(menuImageReverseColor_Click);
  271. this.menuImageReverseColor.Text = PdnResources.GetString("Menu.Image.ReverseColor.Text");
  272. this.menuImageReverseColor.Image = PdnResources.GetImageResource("Icons.MenuActionReverseColorIcon.png").Reference;
  273. //
  274. // 灰度化
  275. //
  276. this.menuImageGrayscale.Click += new EventHandler(menuImageGrayscale_Click);
  277. this.menuImageGrayscale.Text = PdnResources.GetString("Menu.Image.Grayscale.Text");
  278. this.menuImageGrayscale.Image = PdnResources.GetImageResource("Icons.MenuActionGrayscaleIcon.png").Reference;
  279. //
  280. // 白平衡
  281. //
  282. this.menuImageWhiteBalance.Click += new EventHandler(menuImageWhiteBalance_Click);
  283. this.menuImageWhiteBalance.Text = PdnResources.GetString("Menu.Image.WhiteBalance.Text");
  284. this.menuImageWhiteBalance.Image = PdnResources.GetImageResource("Icons.MenuActionWhiteBalanceIcon.png").Reference;
  285. //
  286. // 色彩平衡
  287. //
  288. this.menuImageColorBalance.Click += new EventHandler(menuImageColorBalance_Click);
  289. this.menuImageColorBalance.Text = PdnResources.GetString("Menu.Image.ColorBalance.Text");
  290. this.menuImageColorBalance.Image = PdnResources.GetImageResource("Icons.MenuActionColorBalanceIcon.png").Reference;
  291. //
  292. // 阴影校正
  293. //
  294. this.menuImageShadingCorrection.Click += new EventHandler(MenuImageShadingCorrection_Click);
  295. this.menuImageShadingCorrection.Text = PdnResources.GetString("Menu.Image.ShadingCorrection.Text");
  296. this.menuImageShadingCorrection.Image = PdnResources.GetImageResource("Icons.MenuActionShadingCorrectionIcon.png").Reference;
  297. //
  298. // 色度/饱和度/亮度
  299. //
  300. this.menuImageHSLAdjust.Click += new EventHandler(menuImageHSLAdjust_Click);
  301. this.menuImageHSLAdjust.Text = PdnResources.GetString("Menu.Image.HSLAdjust.Text");
  302. this.menuImageHSLAdjust.Image = PdnResources.GetImageResource("Icons.MenuActionHSLAdjustIcon.png").Reference;
  303. //
  304. // 亮度/对比度/伽马值
  305. //
  306. this.menuImageBCGAdjust.Click += new EventHandler(menuImageBCGAdjust_Click); /*menuImageBCGAdjust_Click*/
  307. this.menuImageBCGAdjust.Text = PdnResources.GetString("Menu.Image.BCGAdjust.Text");
  308. this.menuImageBCGAdjust.Image = PdnResources.GetImageResource("Icons.MenuActionBCGAdjustIcon.png").Reference;
  309. //
  310. // 图像旋转
  311. //
  312. this.menuImageRotate.NeedOpenDialog = true;
  313. this.menuImageRotate.Click += new EventHandler(menuImageRotate_Click);
  314. this.menuImageRotate.Text = PdnResources.GetString("Menu.Imagerotation.text");
  315. this.menuImageRotate.Image = PdnResources.GetImageResource("Icons.MenuImageXuanZhuan.png").Reference;
  316. //
  317. // 描绘
  318. //
  319. this.menuImagePortray.Click += new EventHandler(menuImagePortray_Click);
  320. this.menuImagePortray.Text = PdnResources.GetString("Menu.Image.Portray.Text");
  321. this.menuImagePortray.Image = PdnResources.GetImageResource("Icons.MenuActionPortrayIcon.png").Reference;
  322. //
  323. // 加强轮廓
  324. //
  325. this.menuImageEnhanceContour.Click += new EventHandler(menuImageEnhanceContour_Click);
  326. this.menuImageEnhanceContour.Text = PdnResources.GetString("Menu.Image.EnhanceContour.Text");
  327. this.menuImageEnhanceContour.Image = PdnResources.GetImageResource("Icons.MenuActionEnhanceContourIcon.png").Reference;
  328. //
  329. // 虚化蒙版
  330. //
  331. this.menuImageBlurMask.Click += new EventHandler(menuImageBlurMask_Click);
  332. this.menuImageBlurMask.Text = PdnResources.GetString("Menu.Image.BlurMask.Text");
  333. this.menuImageBlurMask.Image = PdnResources.GetImageResource("Icons.MenuActionBlurMaskIcon.png").Reference;
  334. //
  335. // 西格玛
  336. //
  337. this.menuImageSigma.Click += new EventHandler(menuImageSigma_Click);
  338. this.menuImageSigma.Text = PdnResources.GetString("Menu.Image.Sigma.Text");
  339. this.menuImageSigma.Image = PdnResources.GetImageResource("Icons.MenuActionSigmaIcon.png").Reference;
  340. //
  341. // 各向异性高斯滤波
  342. //
  343. this.menuImageGaussianFiltering.Click += new EventHandler(menuImageGaussianFiltering_Click);
  344. this.menuImageGaussianFiltering.Text = PdnResources.GetString("Menu.Image.GaussianFiltering.Text");
  345. this.menuImageGaussianFiltering.Image = PdnResources.GetImageResource("Icons.MenuActionGaussianFilteringIcon.png").Reference;
  346. //
  347. // 低通滤波
  348. //
  349. this.menuImageLowPassFiltering.Click += new EventHandler(menuImageLowPassFiltering_Click);
  350. this.menuImageLowPassFiltering.Text = PdnResources.GetString("Menu.Image.LowPassFiltering.Text");
  351. this.menuImageLowPassFiltering.Image = PdnResources.GetImageResource("Icons.MenuActionLowPassFilteringIcon.png").Reference;
  352. //
  353. // 中值滤波
  354. //
  355. this.menuImageMedianFiltering.Click += new EventHandler(menuImageMedianFiltering_Click);
  356. this.menuImageMedianFiltering.Text = PdnResources.GetString("Menu.Image.MedianFiltering.Text");
  357. this.menuImageMedianFiltering.Image = PdnResources.GetImageResource("Icons.MenuActionMedianFilteringIcon.png").Reference;
  358. //
  359. // 高斯模糊
  360. //
  361. this.menuImageGaussianBlur.Click += new EventHandler(menuImageGaussianBlur_Click);
  362. this.menuImageGaussianBlur.Text = PdnResources.GetString("Menu.Image.GaussianBlur.Text");
  363. this.menuImageGaussianBlur.Image = PdnResources.GetImageResource("Icons.MenuActionGaussianBlurIcon.png").Reference;
  364. //
  365. // 双边滤波
  366. //
  367. this.menuImageBilateralFiltering.Click += new EventHandler(menuImageBilateralFiltering_Click);
  368. this.menuImageBilateralFiltering.Text = PdnResources.GetString("Menu.Image.BilateralFiltering.Text");
  369. this.menuImageBilateralFiltering.Image = PdnResources.GetImageResource("Icons.MenuActionBilateralFilteringIcon.png").Reference;
  370. //
  371. // 小波降噪
  372. //
  373. this.menuImageWaveletDenoising.Click += new EventHandler(menuImageWaveletDenoising_Click);
  374. this.menuImageWaveletDenoising.Text = PdnResources.GetString("Menu.Image.WaveletDenoising.Text");
  375. this.menuImageWaveletDenoising.Image = PdnResources.GetImageResource("Icons.MenuActionWaveletDenoisingIcon.png").Reference;
  376. //
  377. // Log
  378. //
  379. this.menuImageLog.Click += new EventHandler(menuImageLog_Click);
  380. this.menuImageLog.Text = PdnResources.GetString("Menu.Image.Log.Text");
  381. this.menuImageLog.Image = PdnResources.GetImageResource("Icons.MenuActionLogIcon.png").Reference;
  382. //
  383. // Canny
  384. //
  385. this.menuImageCanny.Click += new EventHandler(menuImageCanny_Click);
  386. this.menuImageCanny.Text = PdnResources.GetString("Menu.Image.Canny.Text");
  387. this.menuImageCanny.Image = PdnResources.GetImageResource("Icons.MenuActionCannyIcon.png").Reference;
  388. //
  389. // Sobel
  390. //
  391. this.menuImageSobel.Click += new EventHandler(menuImageSobel_Click);
  392. this.menuImageSobel.Text = PdnResources.GetString("Menu.Image.Sobel.Text");
  393. this.menuImageSobel.Image = PdnResources.GetImageResource("Icons.MenuActionSobelIcon.png").Reference;
  394. //
  395. // Kirsch
  396. //
  397. this.menuImageKirsch.Click += new EventHandler(menuImageKirsch_Click);
  398. this.menuImageKirsch.Text = PdnResources.GetString("Menu.Image.Kirsch.Text");
  399. this.menuImageKirsch.Image = PdnResources.GetImageResource("Icons.MenuActionKirschIcon.png").Reference;
  400. //
  401. // Prewitt
  402. //
  403. this.menuImagePrewitt.Click += new EventHandler(menuImagePrewitt_Click);
  404. this.menuImagePrewitt.Text = PdnResources.GetString("Menu.Image.Prewitt.Text");
  405. this.menuImagePrewitt.Image = PdnResources.GetImageResource("Icons.MenuActionPrewittIcon.png").Reference;
  406. //
  407. // Roberts
  408. //
  409. this.menuImageRoberts.Click += new EventHandler(menuImageRoberts_Click);
  410. this.menuImageRoberts.Text = PdnResources.GetString("Menu.Image.Roberts.Text");
  411. this.menuImageRoberts.Image = PdnResources.GetImageResource("Icons.MenuActionRobertsIcon.png").Reference;
  412. //
  413. // Laplace
  414. //
  415. this.menuImageLaplace.Click += new EventHandler(menuImageLaplace_Click);
  416. this.menuImageLaplace.Text = PdnResources.GetString("Menu.Image.Laplace.Text");
  417. this.menuImageLaplace.Image = PdnResources.GetImageResource("Icons.MenuActionLaplaceIcon.png").Reference;
  418. //
  419. // 加
  420. //
  421. this.menuImageAddition.Click += new EventHandler(menuImageAddition_Click);
  422. this.menuImageAddition.Text = PdnResources.GetString("Menu.Image.Addition.Text");
  423. this.menuImageAddition.Image = PdnResources.GetImageResource("Icons.MenuActionAdditionIcon.png").Reference;
  424. //
  425. // 减
  426. //
  427. this.menuImageSubtraction.Click += new EventHandler(menuImageSubtraction_Click);
  428. this.menuImageSubtraction.Text = PdnResources.GetString("Menu.Image.Subtraction.Text");
  429. this.menuImageSubtraction.Image = PdnResources.GetImageResource("Icons.MenuActionSubtractionIcon.png").Reference;
  430. //
  431. // 乘
  432. //
  433. this.menuImageMultiplication.Click += new EventHandler(menuImageMultiplication_Click);
  434. this.menuImageMultiplication.Text = PdnResources.GetString("Menu.Image.Multiplication.Text");
  435. this.menuImageMultiplication.Image = PdnResources.GetImageResource("Icons.MenuActionMultiplicationIcon.png").Reference;
  436. //
  437. // 除
  438. //
  439. this.menuImageDivision.Click += new EventHandler(menuImageDivision_Click);
  440. this.menuImageDivision.Text = PdnResources.GetString("Menu.Image.Division.Text");
  441. this.menuImageDivision.Image = PdnResources.GetImageResource("Icons.MenuActionDivisionIcon.png").Reference;
  442. //
  443. // 平均
  444. //
  445. this.menuImageAverage.Click += new EventHandler(menuImageAverage_Click);
  446. this.menuImageAverage.Text = PdnResources.GetString("Menu.Image.Average.Text");
  447. this.menuImageAverage.Image = PdnResources.GetImageResource("Icons.MenuActionAverageIcon.png").Reference;
  448. //
  449. // 平方
  450. //
  451. this.menuImageSquare.Click += new EventHandler(menuImageSquare_Click);
  452. this.menuImageSquare.Text = PdnResources.GetString("Menu.Image.Square.Text");
  453. this.menuImageSquare.Image = PdnResources.GetImageResource("Icons.MenuActionSquareIcon.png").Reference;
  454. //
  455. // 平方根
  456. //
  457. this.menuImageSquareRoot.Click += new EventHandler(menuImageSquareBoot_Click);
  458. this.menuImageSquareRoot.Text = PdnResources.GetString("Menu.Image.SquareRoot.Text");
  459. this.menuImageSquareRoot.Image = PdnResources.GetImageResource("Icons.MenuActionSquareRootIcon.png").Reference;
  460. //
  461. // 对数
  462. //
  463. this.menuImageLogarithm.Click += new EventHandler(menuImageLogarithm_Click);
  464. this.menuImageLogarithm.Text = PdnResources.GetString("Menu.Image.Logarithm.Text");
  465. this.menuImageLogarithm.Image = PdnResources.GetImageResource("Icons.MenuActionLogarithmIcon.png").Reference;
  466. //
  467. // 指数
  468. //
  469. this.menuImageIndex.Click += new EventHandler(menuImageIndex_Click);
  470. this.menuImageIndex.Text = PdnResources.GetString("Menu.Image.Index.Text");
  471. this.menuImageIndex.Image = PdnResources.GetImageResource("Icons.MenuActionIndexIcon.png").Reference;
  472. //
  473. // 最大
  474. //
  475. this.menuImageMax.Click += new EventHandler(menuImageMax_Click);
  476. this.menuImageMax.Text = PdnResources.GetString("Menu.Image.Max.Text");
  477. this.menuImageMax.Image = PdnResources.GetImageResource("Icons.MenuActionMaxIcon.png").Reference;
  478. //
  479. // 最小
  480. //
  481. this.menuImageMin.Click += new EventHandler(menuImageMin_Click);
  482. this.menuImageMin.Text = PdnResources.GetString("Menu.Image.Min.Text");
  483. this.menuImageMin.Image = PdnResources.GetImageResource("Icons.MenuActionMinIcon.png").Reference;
  484. //
  485. // 加载菜单的文字和icon
  486. //
  487. this.LoadNames(this.Name);
  488. this.LoadIcons();
  489. }
  490. /// <summary>
  491. /// 反色
  492. /// </summary>
  493. /// <param name="sender"></param>
  494. /// <param name="e"></param>
  495. private void menuImageReverseColor_Click(object sender, EventArgs e)
  496. {
  497. if (AppWorkspace.ActiveDocumentWorkspace != null)
  498. {
  499. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionRevertColor, PdnResources.GetString("Menu.ImageProcessing.adjust.Imageprocevert.text")/*;//待修改中文资源-scc备注 20191216*/,(PdnMenuItem)sender).ShowDialog();
  500. }
  501. else
  502. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  503. }
  504. /// <summary>
  505. /// 灰度化
  506. /// </summary>
  507. /// <param name="sender"></param>
  508. /// <param name="e"></param>
  509. private void menuImageGrayscale_Click(object sender, EventArgs e)
  510. {
  511. if (AppWorkspace.ActiveDocumentWorkspace != null)
  512. {
  513. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionBgr2Gray, PdnResources.GetString("Menu.ImageProcessing.adjust.Imagepaying.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  514. }
  515. else
  516. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  517. }
  518. /// <summary>
  519. /// 白平衡
  520. /// </summary>
  521. /// <param name="sender"></param>
  522. /// <param name="e"></param>
  523. private void menuImageWhiteBalance_Click(object sender, EventArgs e)
  524. {
  525. if (AppWorkspace.ActiveDocumentWorkspace != null)
  526. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionWhiteBalance, PdnResources.GetString("Menu.ImageProcessing.adjust.Imagepitebalance.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  527. else
  528. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  529. }
  530. /// <summary>
  531. /// 色彩平衡
  532. /// </summary>
  533. /// <param name="sender"></param>
  534. /// <param name="e"></param>
  535. private void menuImageColorBalance_Click(object sender, EventArgs e)
  536. {
  537. if (AppWorkspace.ActiveDocumentWorkspace != null)
  538. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionColorBalance, PdnResources.GetString("Menu.Imageprocesorbalance.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  539. else
  540. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  541. }
  542. /// <summary>
  543. /// 阴影校正
  544. /// </summary>
  545. /// <param name="sender"></param>
  546. /// <param name="e"></param>
  547. private void MenuImageShadingCorrection_Click(object sender, EventArgs e)
  548. {
  549. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  550. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionShadingCorrection, PdnResources.GetString("Menu.Imageprocessingadjustmentshadowcorrection.Text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  551. }
  552. else
  553. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  554. }
  555. /// <summary>
  556. /// 色度/饱和度/亮度
  557. /// </summary>
  558. /// <param name="sender"></param>
  559. /// <param name="e"></param>
  560. private void menuImageHSLAdjust_Click(object sender, EventArgs e)
  561. {
  562. if (AppWorkspace.ActiveDocumentWorkspace != null)
  563. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionHSB, PdnResources.GetString("Menu.processingadjustmentchrom.Text")/*;//待修改中文资源-scc备注 20191212*/, (PdnMenuItem)sender).ShowDialog();
  564. else
  565. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  566. }
  567. /// <summary>
  568. /// 亮度/对比度/伽马值
  569. /// </summary>
  570. /// <param name="sender"></param>
  571. /// <param name="e"></param>
  572. private void menuImageBCGAdjust_Click(object sender, EventArgs e)
  573. {
  574. if (AppWorkspace.ActiveDocumentWorkspace != null)
  575. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionBCG, PdnResources.GetString("Menu.eprocessinadjustmentbrigh.Text")/*;//待修改中文资源-scc备注 20191212*/, (PdnMenuItem)sender).ShowDialog();
  576. else
  577. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  578. }
  579. /// <summary>
  580. /// 图像旋转
  581. /// </summary>
  582. /// <param name="sender"></param>
  583. /// <param name="e"></param>
  584. private void menuImageRotate_Click(object sender, EventArgs e)
  585. {
  586. if (AppWorkspace.ActiveDocumentWorkspace != null)
  587. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionImageRotate, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.Adjust.Text") + "-" + PdnResources.GetString("Menu.Imagerotation.text")/*;//待修改中文资源-scc备注 20191212*/, (PdnMenuItem)sender).ShowDialog();
  588. else
  589. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  590. }
  591. /// <summary>
  592. /// 描绘
  593. /// </summary>
  594. /// <param name="sender"></param>
  595. /// <param name="e"></param>
  596. private void menuImagePortray_Click(object sender, EventArgs e)
  597. {
  598. if (AppWorkspace.ActiveDocumentWorkspace != null)
  599. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionPortray, PdnResources.GetString("Menu.ImageProcessing.Sharpen.Imagscribe.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  600. else
  601. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  602. }
  603. /// <summary>
  604. /// 加强轮廓
  605. /// </summary>
  606. /// <param name="sender"></param>
  607. /// <param name="e"></param>
  608. private void menuImageEnhanceContour_Click(object sender, EventArgs e)
  609. {
  610. if (AppWorkspace.ActiveDocumentWorkspace != null)
  611. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionEnhanceContour, PdnResources.GetString("Menu.Imageprochencontours.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  612. else
  613. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  614. }
  615. /// <summary>
  616. /// 虚化蒙版
  617. /// </summary>
  618. /// <param name="sender"></param>
  619. /// <param name="e"></param>
  620. private void menuImageBlurMask_Click(object sender, EventArgs e)
  621. {
  622. if (AppWorkspace.ActiveDocumentWorkspace != null)
  623. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionBlurMask, PdnResources.GetString("Menu.Image.Text")+"-"+PdnResources.GetString("Menu.Image.Sharpen.Text")+"-"+PdnResources.GetString("Menu.Image.BlurMask.Text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  624. else
  625. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  626. }
  627. /// <summary>
  628. /// 西格玛
  629. /// </summary>
  630. /// <param name="sender"></param>
  631. /// <param name="e"></param>
  632. private void menuImageSigma_Click(object sender, EventArgs e)
  633. {
  634. if (AppWorkspace.ActiveDocumentWorkspace != null)
  635. new BshTransferAdjustDialog(AppWorkspace, ActionType.Sigma,PdnResources.GetString("Menu.ImageProcessing.smooth.ImageProcgma.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  636. else
  637. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  638. }
  639. /// <summary>
  640. /// 各向异性高斯滤波
  641. /// </summary>
  642. /// <param name="sender"></param>
  643. /// <param name="e"></param>F
  644. private void menuImageGaussianFiltering_Click(object sender, EventArgs e)
  645. {
  646. if (AppWorkspace.ActiveDocumentWorkspace != null)
  647. new BshTransferAdjustDialog(AppWorkspace, ActionType.GaussianFiltering,PdnResources.GetString("Menu.ImageProcessing.smooth.Imagnfiltering.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  648. else
  649. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  650. }
  651. /// <summary>
  652. /// 低通滤波
  653. /// </summary>
  654. /// <param name="sender"></param>
  655. /// <param name="e"></param>
  656. private void menuImageLowPassFiltering_Click(object sender, EventArgs e)
  657. {
  658. if (AppWorkspace.ActiveDocumentWorkspace != null)
  659. new BshTransferAdjustDialog(AppWorkspace, ActionType.LowPassFiltering,PdnResources.GetString("Menu.Image.Text")+"-"+PdnResources.GetString("Menu.Image.Smooth.Text")+"-"+PdnResources.GetString("Menu.Image.LowPassFiltering.Text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  660. else
  661. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  662. }
  663. /// <summary>
  664. /// 中值滤波
  665. /// </summary>
  666. /// <param name="sender"></param>
  667. /// <param name="e"></param>
  668. private void menuImageMedianFiltering_Click(object sender, EventArgs e)
  669. {
  670. if (AppWorkspace.ActiveDocumentWorkspace != null)
  671. new BshTransferAdjustDialog(AppWorkspace, ActionType.MedianFiltering, PdnResources.GetString("Menu.ImageProcessing.smooth.Imageprocdianfilter.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  672. else
  673. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  674. }
  675. /// <summary>
  676. /// 高斯模糊
  677. /// </summary>
  678. /// <param name="sender"></param>
  679. /// <param name="e"></param>
  680. private void menuImageGaussianBlur_Click(object sender, EventArgs e)
  681. {
  682. if (AppWorkspace.ActiveDocumentWorkspace != null)
  683. new BshTransferAdjustDialog(AppWorkspace, ActionType.GaussianBlur, PdnResources.GetString("Menu.ImageProcessing.smooth.ImageProcessianBlur.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  684. else
  685. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  686. }
  687. /// <summary>
  688. /// 双边滤波
  689. /// </summary>
  690. /// <param name="sender"></param>
  691. /// <param name="e"></param>
  692. private void menuImageBilateralFiltering_Click(object sender, EventArgs e)
  693. {
  694. if (AppWorkspace.ActiveDocumentWorkspace != null)
  695. new BshTransferAdjustDialog(AppWorkspace, ActionType.BilateralFiltering, PdnResources.GetString("Menu.ImageProcessing.smooth.Imageproltering.text")/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  696. else
  697. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  698. }
  699. /// <summary>
  700. /// 小波降噪
  701. /// </summary>
  702. /// <param name="sender"></param>
  703. /// <param name="e"></param>
  704. private void menuImageWaveletDenoising_Click(object sender, EventArgs e)
  705. {
  706. if (AppWorkspace.ActiveDocumentWorkspace != null)
  707. new BshTransferAdjustDialog(AppWorkspace, ActionType.WaveletDenoising, PdnResources.GetString("Menu.ImageProcessing.smooth.Imageprocessineanfiltering.text")/* 小波降噪;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  708. else
  709. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  710. }
  711. /// <summary>
  712. /// Log
  713. /// </summary>
  714. /// <param name="sender"></param>
  715. /// <param name="e"></param>
  716. private void menuImageLog_Click(object sender, EventArgs e)
  717. {
  718. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  719. new BshTransferAdjustDialog(AppWorkspace, ActionType.Log, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Log"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  720. }
  721. else
  722. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  723. }
  724. /// <summary>
  725. /// Canny
  726. /// </summary>
  727. /// <param name="sender"></param>
  728. /// <param name="e"></param>
  729. private void menuImageCanny_Click(object sender, EventArgs e)
  730. {
  731. if (AppWorkspace.ActiveDocumentWorkspace != null)
  732. {
  733. new BshTransferAdjustDialog(AppWorkspace, ActionType.Canny, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Canny"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  734. }
  735. else
  736. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  737. }
  738. /// <summary>
  739. /// Sobel
  740. /// </summary>
  741. /// <param name="sender"></param>
  742. /// <param name="e"></param>
  743. private void menuImageSobel_Click(object sender, EventArgs e)
  744. {
  745. if (AppWorkspace.ActiveDocumentWorkspace != null)
  746. {
  747. new BshTransferAdjustDialog(AppWorkspace, ActionType.Sobel, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Sobel"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  748. }
  749. else
  750. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  751. }
  752. /// <summary>
  753. /// Kirsch
  754. /// </summary>
  755. /// <param name="sender"></param>
  756. /// <param name="e"></param>
  757. private void menuImageKirsch_Click(object sender, EventArgs e)
  758. {
  759. if (AppWorkspace.ActiveDocumentWorkspace != null)
  760. {
  761. new BshTransferAdjustDialog(AppWorkspace, ActionType.Kirsch, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Kirsch"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  762. }
  763. else
  764. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  765. }
  766. /// <summary>
  767. /// Prewitt
  768. /// </summary>
  769. /// <param name="sender"></param>
  770. /// <param name="e"></param>
  771. private void menuImagePrewitt_Click(object sender, EventArgs e)
  772. {
  773. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  774. new BshTransferAdjustDialog(AppWorkspace, ActionType.Prewitt, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Prewitt"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  775. }
  776. else
  777. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  778. }
  779. /// <summary>
  780. /// Roberts
  781. /// </summary>
  782. /// <param name="sender"></param>
  783. /// <param name="e"></param>
  784. private void menuImageRoberts_Click(object sender, EventArgs e)
  785. {
  786. if (AppWorkspace.ActiveDocumentWorkspace != null)
  787. {
  788. new BshTransferAdjustDialog(AppWorkspace, ActionType.Roberts, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Roberts"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  789. }
  790. else
  791. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  792. }
  793. /// <summary>
  794. /// Laplace
  795. /// </summary>
  796. /// <param name="sender"></param>
  797. /// <param name="e"></param>
  798. private void menuImageLaplace_Click(object sender, EventArgs e)
  799. {
  800. if (AppWorkspace.ActiveDocumentWorkspace != null)
  801. {
  802. new BshTransferAdjustDialog(AppWorkspace, ActionType.Laplace, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.EdgeDetection.Text") + "-Laplace"/*;//待修改中文资源-scc备注 20191216*/, (PdnMenuItem)sender).ShowDialog();
  803. }
  804. else
  805. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  806. }
  807. /// <summary>
  808. /// 加
  809. /// </summary>
  810. /// <param name="sender"></param>
  811. /// <param name="e"></param>
  812. private void menuImageAddition_Click(object sender, EventArgs e)
  813. {
  814. if (AppWorkspace.ActiveDocumentWorkspace != null)
  815. {
  816. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageAddition, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageprodd.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  817. }
  818. else
  819. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  820. }
  821. /// <summary>
  822. /// 减
  823. /// </summary>
  824. /// <param name="sender"></param>
  825. /// <param name="e"></param>
  826. private void menuImageSubtraction_Click(object sender, EventArgs e)
  827. {
  828. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  829. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageSubtraction, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageprub.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  830. }
  831. else
  832. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  833. }
  834. /// <summary>
  835. /// 乘
  836. /// </summary>
  837. /// <param name="sender"></param>
  838. /// <param name="e"></param>
  839. private void menuImageMultiplication_Click(object sender, EventArgs e)
  840. {
  841. if (AppWorkspace.ActiveDocumentWorkspace != null)
  842. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageMultiplication, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageprocply.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  843. else
  844. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  845. }
  846. /// <summary>
  847. /// 除
  848. /// </summary>
  849. /// <param name="sender"></param>
  850. /// <param name="e"></param>
  851. private void menuImageDivision_Click(object sender, EventArgs e)
  852. {
  853. if (AppWorkspace.ActiveDocumentWorkspace != null)
  854. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageDivision, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageproision.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  855. else
  856. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  857. }
  858. /// <summary>
  859. /// 平均
  860. /// </summary>
  861. /// <param name="sender"></param>
  862. /// <param name="e"></param>
  863. private void menuImageAverage_Click(object sender, EventArgs e)
  864. {
  865. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  866. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageAverage, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageperage.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  867. }
  868. else
  869. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  870. }
  871. /// <summary>
  872. /// 平方
  873. /// </summary>
  874. /// <param name="sender"></param>
  875. /// <param name="e"></param>
  876. private void menuImageSquare_Click(object sender, EventArgs e)
  877. {
  878. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  879. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageSquare, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imagepare.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  880. }
  881. else
  882. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  883. }
  884. /// <summary>
  885. /// 平方根
  886. /// </summary>
  887. /// <param name="sender"></param>
  888. /// <param name="e"></param>
  889. private void menuImageSquareBoot_Click(object sender, EventArgs e)
  890. {
  891. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  892. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageSquareBoot, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageareroots.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  893. }
  894. else
  895. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  896. }
  897. /// <summary>
  898. /// 对数
  899. /// </summary>
  900. /// <param name="sender"></param>
  901. /// <param name="e"></param>
  902. private void menuImageLogarithm_Click(object sender, EventArgs e)
  903. {
  904. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  905. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageLogarithm, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageprlog.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  906. }
  907. else
  908. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  909. }
  910. /// <summary>
  911. /// 指数
  912. /// </summary>
  913. /// <param name="sender"></param>
  914. /// <param name="e"></param>
  915. private void menuImageIndex_Click(object sender, EventArgs e)
  916. {
  917. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  918. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageIndex, PdnResources.GetString("Menu.ImageProcessing.boundarydetection.Imageprodex.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  919. }
  920. else
  921. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  922. }
  923. /// <summary>
  924. /// 最大
  925. /// </summary>
  926. /// <param name="sender"></param>
  927. /// <param name="e"></param>
  928. private void menuImageMax_Click(object sender, EventArgs e)
  929. {
  930. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  931. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageMax, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.InterImageOperation.Text") + "-" + PdnResources.GetString("Menu.max.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  932. }
  933. else
  934. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  935. }
  936. /// <summary>
  937. /// 最小
  938. /// </summary>
  939. /// <param name="sender"></param>
  940. /// <param name="e"></param>
  941. private void menuImageMin_Click(object sender, EventArgs e)
  942. {
  943. if (AppWorkspace.ActiveDocumentWorkspace != null) {
  944. new InterImageOpDialog(AppWorkspace, ActionType.ActionImageMin, PdnResources.GetString("Menu.Image.Text") + "-" + PdnResources.GetString("Menu.Image.InterImageOperation.Text") + "-" + PdnResources.GetString("Menu.minimum.text")/*;//待修改中文资源-scc备注 20191217*/, (PdnMenuItem)sender).ShowDialog();
  945. }
  946. else
  947. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  948. }
  949. /// <summary>
  950. /// 图像偏移
  951. /// </summary>
  952. /// <param name="sender"></param>
  953. /// <param name="e"></param>
  954. private void menuImageShift_Click(object sender, EventArgs e)
  955. {
  956. if (AppWorkspace.ActiveDocumentWorkspace != null)
  957. new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionImageOffset, PdnResources.GetString("Menu.Image.Text")+"-"+ PdnResources.GetString("Menu.Image.ImageShift.Text"), (PdnMenuItem)sender).ShowDialog();
  958. else
  959. MessageBox.Show(PdnResources.GetString("Menu.Pleaseopenatleastonepicturefirst.Text"));
  960. }
  961. /// <summary>
  962. /// 图像拼接
  963. /// </summary>
  964. /// <param name="sender"></param>
  965. /// <param name="e"></param>
  966. private void menuImageStitching_Click(object sender, EventArgs e)
  967. {
  968. List<List<double>> localxys = new List<List<double>>();
  969. double[] xs = new double[] { 0, 4, 8 };
  970. double[] ys = new double[] { 0, 5, 0 };
  971. double[] zs = new double[] { 8112.3, 7802.525, 8577.95 };
  972. double[] cals = this.PanelFit(xs, ys, zs);
  973. double cala = cals[0];
  974. for (int ix = 0; ix < 9; ix++)
  975. {
  976. List<double> localys = new List<double>();
  977. for (int iy = 0; iy < 6; iy++)
  978. {
  979. double z = (-cals[0] * ix - cals[1] * iy - cals[3]) / cals[2];
  980. localys.Add(z - 7);
  981. }
  982. localxys.Add(localys);
  983. }
  984. double zva = localxys[0][0];
  985. //new BshTransferAdjustDialog(AppWorkspace, ActionType.ActionImageStitching, PdnResources.GetString("Menu.Image.Text")+"-"+ PdnResources.GetString("Menu.ImageCollection.ImageStitching.Text")).ShowDialog();
  986. using (ImageMosaicsDialog imageMosaicsDialog = new ImageMosaicsDialog(this.AppWorkspace))
  987. {
  988. imageMosaicsDialog.StartPosition = FormStartPosition.CenterScreen;
  989. imageMosaicsDialog.ShowDialog();
  990. }
  991. if (AppWorkspace.startScriptRecording)
  992. {
  993. AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());
  994. }
  995. }
  996. /// <summary>
  997. /// 平面方程拟合,ax+by+cz+d=0,其中a=result[0],b=result[1],c=result[2],d=result[3]
  998. /// </summary>
  999. /// <param name="x"></param>
  1000. /// <param name="y"></param>
  1001. /// <param name="z"></param>
  1002. /// <returns></returns>
  1003. private double[] PanelFit(double[] x, double[] y, double[] z)
  1004. {
  1005. double[] result = new double[4];
  1006. int n = x.Length;
  1007. double[,] A = new double[n, 3];
  1008. double[,] E = new double[n, 1];
  1009. for (int i = 0; i < n; i++)
  1010. {
  1011. A[i, 0] = x[i] - z[i];
  1012. A[i, 1] = y[i] - z[i];
  1013. A[i, 2] = 1;
  1014. E[i, 0] = -z[i];
  1015. }
  1016. double[,] AT = MatrixInver(A);
  1017. double[,] ATxA = MatrixMultiply(AT, A);
  1018. double[,] OPPAxTA = MatrixOpp(ATxA);
  1019. double[,] OPPATAxAT = MatrixMultiply(OPPAxTA, AT);
  1020. double[,] DP = MatrixMultiply(OPPATAxAT, E);
  1021. result[0] = DP[0, 0];
  1022. result[1] = DP[1, 0];
  1023. result[2] = 1 - result[0] - result[1];
  1024. result[3] = DP[2, 0];
  1025. return result;
  1026. }
  1027. /// <summary>
  1028. /// 矩阵转置
  1029. /// </summary>
  1030. /// <param name="matrix"></param>
  1031. /// <returns></returns>
  1032. private double[,] MatrixInver(double[,] matrix)
  1033. {
  1034. double[,] result = new double[matrix.GetLength(1), matrix.GetLength(0)];
  1035. for (int i = 0; i < matrix.GetLength(1); i++)
  1036. for (int j = 0; j < matrix.GetLength(0); j++)
  1037. result[i, j] = matrix[j, i];
  1038. return result;
  1039. }
  1040. /// <summary>
  1041. /// 矩阵相乘
  1042. /// </summary>
  1043. /// <param name="matrixA"></param>
  1044. /// <param name="matrixB"></param>
  1045. /// <returns></returns>
  1046. private double[,] MatrixMultiply(double[,] matrixA, double[,] matrixB)
  1047. {
  1048. double[,] result = new double[matrixA.GetLength(0), matrixB.GetLength(1)];
  1049. for (int i = 0; i < matrixA.GetLength(0); i++)
  1050. {
  1051. for (int j = 0; j < matrixB.GetLength(1); j++)
  1052. {
  1053. result[i, j] = 0;
  1054. for (int k = 0; k < matrixB.GetLength(0); k++)
  1055. {
  1056. result[i, j] += matrixA[i, k] * matrixB[k, j];
  1057. }
  1058. }
  1059. }
  1060. return result;
  1061. }
  1062. /// <summary>
  1063. /// 矩阵的逆
  1064. /// </summary>
  1065. /// <param name="matrix"></param>
  1066. /// <returns></returns>
  1067. private double[,] MatrixOpp(double[,] matrix)
  1068. {
  1069. double X = 1 / MatrixSurplus(matrix);
  1070. double[,] matrixB = new double[matrix.GetLength(0), matrix.GetLength(1)];
  1071. double[,] matrixSP = new double[matrix.GetLength(0), matrix.GetLength(1)];
  1072. double[,] matrixAB = new double[matrix.GetLength(0), matrix.GetLength(1)];
  1073. for (int i = 0; i < matrix.GetLength(0); i++)
  1074. for (int j = 0; j < matrix.GetLength(1); j++)
  1075. {
  1076. for (int m = 0; m < matrix.GetLength(0); m++)
  1077. for (int n = 0; n < matrix.GetLength(1); n++)
  1078. matrixB[m, n] = matrix[m, n];
  1079. {
  1080. for (int x = 0; x < matrix.GetLength(1); x++)
  1081. matrixB[i, x] = 0;
  1082. for (int y = 0; y < matrix.GetLength(0); y++)
  1083. matrixB[y, j] = 0;
  1084. matrixB[i, j] = 1;
  1085. matrixSP[i, j] = MatrixSurplus(matrixB);
  1086. matrixAB[i, j] = X * matrixSP[i, j];
  1087. }
  1088. }
  1089. return MatrixInver(matrixAB);
  1090. }
  1091. /// <summary>
  1092. /// 矩阵的行列式的值
  1093. /// </summary>
  1094. /// <param name="A"></param>
  1095. /// <returns></returns>
  1096. public static double MatrixSurplus(double[,] matrix)
  1097. {
  1098. double X = -1;
  1099. double[,] a = matrix;
  1100. int i, j, k, p, r, m, n;
  1101. m = a.GetLength(0);
  1102. n = a.GetLength(1);
  1103. double temp = 1, temp1 = 1, s = 0, s1 = 0;
  1104. if (n == 2)
  1105. {
  1106. for (i = 0; i < m; i++)
  1107. for (j = 0; j < n; j++)
  1108. if ((i + j) % 2 > 0) temp1 *= a[i, j];
  1109. else temp *= a[i, j];
  1110. X = temp - temp1;
  1111. }
  1112. else
  1113. {
  1114. for (k = 0; k < n; k++)
  1115. {
  1116. for (i = 0, j = k; i < m && j < n; i++, j++)
  1117. temp *= a[i, j];
  1118. if (m - i > 0)
  1119. {
  1120. for (p = m - i, r = m - 1; p > 0; p--, r--)
  1121. temp *= a[r, p - 1];
  1122. }
  1123. s += temp;
  1124. temp = 1;
  1125. }
  1126. for (k = n - 1; k >= 0; k--)
  1127. {
  1128. for (i = 0, j = k; i < m && j >= 0; i++, j--)
  1129. temp1 *= a[i, j];
  1130. if (m - i > 0)
  1131. {
  1132. for (p = m - 1, r = i; r < m; p--, r++)
  1133. temp1 *= a[r, p];
  1134. }
  1135. s1 += temp1;
  1136. temp1 = 1;
  1137. }
  1138. X = s - s1;
  1139. }
  1140. return X;
  1141. }
  1142. /// <summary>
  1143. /// 景深拓展
  1144. /// </summary>
  1145. /// <param name="sender"></param>
  1146. /// <param name="e"></param>
  1147. private void MenuImageDepthExtension_Click(object sender, EventArgs e)
  1148. {
  1149. if (AppWorkspace.startScriptRecording)
  1150. {
  1151. AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());
  1152. }
  1153. using (ImageDepthExtensionDialog imageDepthExtensionDialog = new ImageDepthExtensionDialog(this.AppWorkspace))
  1154. {
  1155. imageDepthExtensionDialog.StartPosition = FormStartPosition.CenterScreen;
  1156. imageDepthExtensionDialog.ShowDialog();
  1157. }
  1158. }
  1159. protected override void OnDropDownOpening(EventArgs e)
  1160. {
  1161. if (AppWorkspace.ActiveDocumentWorkspace == null || AppWorkspace.ScriptRunning)
  1162. {
  1163. this.menuImageAdjust.Enabled = false;
  1164. this.menuImageSharpen.Enabled = false;
  1165. this.menuImageSmooth.Enabled = false;
  1166. this.menuImageEdgeDetection.Enabled = false;
  1167. this.menuImageInterOperation.Enabled = false;
  1168. this.menuImageShift.Enabled = false;
  1169. }
  1170. else
  1171. {
  1172. this.menuImageAdjust.Enabled = true;
  1173. this.menuImageSharpen.Enabled = true;
  1174. this.menuImageSmooth.Enabled = true;
  1175. this.menuImageEdgeDetection.Enabled = true;
  1176. this.menuImageInterOperation.Enabled = true;
  1177. this.menuImageShift.Enabled = true;
  1178. }
  1179. this.menuImageStitching.Enabled = !AppWorkspace.ScriptRunning;
  1180. this.menuImageDepthExtension.Enabled = !AppWorkspace.ScriptRunning;
  1181. base.OnDropDownOpening(e);
  1182. }
  1183. }
  1184. }