SRCSharpTools.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Drawing.Imaging;
  5. using System.Runtime.InteropServices;
  6. using System.Drawing;
  7. namespace SRCSharpDemo
  8. {
  9. public class SRCSharpTools
  10. {
  11. private Dictionary<string, Dictionary<string, string>> translations = new Dictionary<string, Dictionary<string, string>>();
  12. public string currentDir;
  13. private string translateCountry;
  14. public SRCSharpTools()
  15. {
  16. }
  17. #region language
  18. public void IniLanguageLoader(int translateMode)
  19. {
  20. SetTranslateMode(translateMode);
  21. LoadTranslateIni();
  22. }
  23. public void SetTranslateMode(int translateMode)
  24. {
  25. if (translateMode == 0)
  26. {
  27. translateCountry = "CHINESE";
  28. }
  29. else if (translateMode == 2)
  30. {
  31. translateCountry = "KOREAN";
  32. }
  33. else
  34. {
  35. translateCountry = "ENGLISH";
  36. }
  37. }
  38. private void LoadTranslateIni()
  39. {
  40. currentDir = Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
  41. string translateIniPath = currentDir + "//Language.ini";
  42. if (!File.Exists(translateIniPath))
  43. {
  44. Console.WriteLine("Error: INI file not found!");
  45. return;
  46. }
  47. string currentLanguage = null;
  48. foreach (var line in File.ReadAllLines(translateIniPath))
  49. {
  50. string trimmed = line.Trim();
  51. if (string.IsNullOrEmpty(trimmed) || trimmed.StartsWith(";")) continue;
  52. if (trimmed.StartsWith("[") && trimmed.EndsWith("]"))
  53. {
  54. currentLanguage = trimmed.Trim('[', ']');
  55. if (!translations.ContainsKey(currentLanguage))
  56. {
  57. translations[currentLanguage] = new Dictionary<string, string>();
  58. }
  59. }
  60. else if (currentLanguage != null && trimmed.Contains("="))
  61. {
  62. int index = trimmed.IndexOf('=');
  63. if (index > 0) //Make sure '=' exists
  64. {
  65. string key = trimmed.Substring(0, index).Trim();
  66. string value = trimmed.Substring(index + 1).Trim();
  67. translations[currentLanguage][key] = value;
  68. }
  69. }
  70. }
  71. }
  72. public string GetTranslationF(string key, string language = "ENGLISH", string defaultValue = "Translation not found")
  73. {
  74. if (translations.ContainsKey(language) && translations[language].ContainsKey(key))
  75. {
  76. return translations[language][key];
  77. }
  78. return defaultValue;
  79. }
  80. public string GetTranslation(string key, string defaultValue = "Translation not found")
  81. {
  82. //if (translations.ContainsKey(translateCountry) && translations[translateCountry].ContainsKey(key))
  83. //{
  84. // return translations[translateCountry][key];
  85. //}
  86. return defaultValue;
  87. }
  88. #endregion
  89. #region show image
  90. public Bitmap CreateBitmapFromChannels(byte[] pR, byte[] pG, byte[] pB, int width, int height)
  91. {
  92. int nTotalPoints = width * height;
  93. byte[] pRGBData = new byte[width * height * 3]; // 24-bit RGB
  94. // Merge R, G, B into RGB array
  95. for (int i = 0; i < nTotalPoints; i++)
  96. {
  97. pRGBData[i * 3 + 0] = pB[i]; // Blue
  98. pRGBData[i * 3 + 1] = pG[i]; // Green
  99. pRGBData[i * 3 + 2] = pR[i]; // Red
  100. }
  101. Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
  102. BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
  103. // Copy data to Bitmap
  104. Marshal.Copy(pRGBData, 0, bmpData.Scan0, pRGBData.Length);
  105. bmp.UnlockBits(bmpData);
  106. return bmp;
  107. }
  108. public Bitmap ByteArrayToGrayBitmap(byte[] imageData, int width, int height)
  109. {
  110. Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
  111. // 获取 Bitmap 数据
  112. BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height),
  113. ImageLockMode.WriteOnly,
  114. PixelFormat.Format8bppIndexed);
  115. // 复制数据
  116. IntPtr ptr = bmpData.Scan0;
  117. int stride = bmpData.Stride;
  118. byte[] newData = new byte[stride * height];
  119. // 把数据按行复制到新数组
  120. for (int y = 0; y < height; y++)
  121. {
  122. Array.Copy(imageData, y * width, newData, y * stride, width);
  123. }
  124. Marshal.Copy(newData, 0, ptr, newData.Length);
  125. bmp.UnlockBits(bmpData);
  126. // 调整颜色表,确保正确显示灰度图
  127. ColorPalette palette = bmp.Palette;
  128. for (int i = 0; i < 256; i++)
  129. {
  130. palette.Entries[i] = Color.FromArgb(i, i, i);
  131. }
  132. bmp.Palette = palette;
  133. return bmp;
  134. }
  135. #endregion
  136. #region SetSetting item
  137. public List<string> GetSettingParams()
  138. {
  139. List<string> veParams = new List<string>();
  140. //veParams.Add(GetTranslation("SETTING_TRIG_MODE"));
  141. //veParams.Add(GetTranslation("SETTING_SAMPLED_CYCLE"));
  142. //veParams.Add(GetTranslation("SETTING_BATCH_ON_OFF"));
  143. //veParams.Add(GetTranslation("SETTING_ENCODER_TYPE"));
  144. //veParams.Add(GetTranslation("SETTING_ENCODER_INPUTMODE"));
  145. //veParams.Add(GetTranslation("SETTING_REFINING_POINTS"));
  146. //veParams.Add(GetTranslation("SETTING_BATCH_POINT"));
  147. //veParams.Add(GetTranslation("SETTING_CYCLICAL_PATTERN"));
  148. //veParams.Add(GetTranslation("SETTING_BATCH_OUTPUT"));
  149. //veParams.Add(GetTranslation("SETTING_Z_MEASURING_RANGE"));
  150. //veParams.Add(GetTranslation("SETTING_SENSITIVITY"));
  151. //veParams.Add(GetTranslation("SETTING_EXP_TIME"));
  152. //veParams.Add(GetTranslation("SETTING_LIGHT_CONTROL"));
  153. //veParams.Add(GetTranslation("SETTING_LIGHT_MAX"));
  154. //veParams.Add(GetTranslation("SETTING_LIGHT_MIN"));
  155. //veParams.Add(GetTranslation("SETTING_PEAK_SENSITIVITY"));
  156. //veParams.Add(GetTranslation("SETTING_PEAK_SELECT"));
  157. //veParams.Add(GetTranslation("SETTING_X_SAMPLING"));
  158. //veParams.Add(GetTranslation("SETTING_FILTER_X_MEDIAN"));
  159. //veParams.Add(GetTranslation("SETTING_FILTER_X_SMOOTH"));
  160. //veParams.Add(GetTranslation("SETTING_FILTER_Y_MEDIAN"));
  161. //veParams.Add(GetTranslation("SETTING_FILTER_Y_SMOOTH"));
  162. //veParams.Add(GetTranslation("SETTING_CHANGE_3D_25D"));
  163. //veParams.Add(GetTranslation("SETTING_X_PIXEL"));
  164. //veParams.Add(GetTranslation("SETTING_X_PITCH"));
  165. return veParams;
  166. }
  167. #endregion
  168. }
  169. }