前端转vue
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ImageManager.xaml.cs 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using Platform.Presentation.Interfaces;
  15. using System.IO;
  16. using System.ComponentModel;
  17. namespace TellerSystem.Controls.Ext.Controls
  18. {
  19. /// <summary>
  20. /// ImageManager.xaml 的交互逻辑
  21. /// </summary>
  22. [DesignTimeVisible(false)]
  23. public partial class ImageManager : UserControl
  24. {
  25. public ImageManager()
  26. {
  27. InitializeComponent();
  28. }
  29. /// <summary>
  30. /// 注册的图像采集信息列表
  31. /// </summary>
  32. private List<ImageCollectInfo> _registerImageCollectInfo = new List<ImageCollectInfo>();
  33. /// <summary>
  34. /// 注册图像采集动作
  35. /// </summary>
  36. /// <param name="name"></param>
  37. /// <param name="description"></param>
  38. public void RegisterImageCollectInfo(string name, string description)
  39. {
  40. if (_registerImageCollectInfo.Exists(x => x.Name == name))
  41. {
  42. throw new ArgumentOutOfRangeException(string.Format("图像采集控件:{0}采集项已经注册!", name));
  43. }
  44. _registerImageCollectInfo.Add(new ImageCollectInfo { Name = name, Description = description, Collectable = false });
  45. }
  46. /// <summary>
  47. /// 设置是否执行采集动作
  48. /// </summary>
  49. /// <param name="name"></param>
  50. /// <param name="flag"></param>
  51. public void SetCollectable(string name, bool flag, string description = null)
  52. {
  53. var item = _registerImageCollectInfo.FirstOrDefault(x => x.Name == name);
  54. if (item != null)
  55. {
  56. if (!string.IsNullOrEmpty(description))
  57. item.Description = description;
  58. item.IsCollected = false;
  59. item.Collectable = flag;
  60. //更新数据源
  61. DataList.ItemsSource = _registerImageCollectInfo.Where(x => x.Collectable);
  62. DataList.Items.Refresh();
  63. }
  64. }
  65. /// <summary>
  66. /// 获取指定的图像采集数据
  67. /// </summary>
  68. /// <param name="name"></param>
  69. /// <returns></returns>
  70. public byte[] GetCollectImage(string name)
  71. {
  72. byte[] ret = null;
  73. var item = _registerImageCollectInfo.FirstOrDefault(x => x.Name == name && x.Collectable && x.IsCollected);
  74. if (item != null)
  75. {
  76. //将图片转换成数据
  77. ret = item.Data;
  78. }
  79. return ret;
  80. }
  81. /// <summary>
  82. /// 取出所有已采集的图像信息
  83. /// </summary>
  84. /// <returns></returns>
  85. public Dictionary<string, byte[]> GetAllCollectImage()
  86. {
  87. var ret = new Dictionary<string, byte[]>();
  88. var list = _registerImageCollectInfo.FindAll(x => x.Collectable && x.IsCollected);
  89. foreach (var item in list)
  90. {
  91. if (item.IsCollected)
  92. {
  93. //取出图像数据
  94. ret.Add(item.Name, item.Data);
  95. }
  96. }
  97. return ret;
  98. }
  99. /// <summary>
  100. /// 是否全部采集完毕
  101. /// </summary>
  102. /// <returns></returns>
  103. public bool IsCollectAll()
  104. {
  105. var list = _registerImageCollectInfo.Find(x => x.Collectable && !x.IsCollected);
  106. return list == null;
  107. }
  108. class ImageCollectInfo
  109. {
  110. /// <summary>
  111. /// 图像id
  112. /// </summary>
  113. public string Name { get; set; }
  114. /// <summary>
  115. /// 描述
  116. /// </summary>
  117. public string Description { get; set; }
  118. /// <summary>
  119. /// 是否已采集
  120. /// </summary>
  121. public bool IsCollected { get; set; }
  122. /// <summary>
  123. /// 是否参与采集
  124. /// </summary>
  125. public bool Collectable { get; set; }
  126. /// <summary>
  127. /// 数据图像
  128. /// </summary>
  129. public ImageSource ImageSource { get; set; }
  130. /// <summary>
  131. /// 图像数据
  132. /// </summary>
  133. public byte[] Data { get; set; }
  134. }
  135. private void CollectButton_Click(object sender, RoutedEventArgs e)
  136. {
  137. //调用采集方法采集图片
  138. var btn = sender as Button;
  139. if (btn != null && btn.Tag is ImageCollectInfo)
  140. {
  141. var info = btn.Tag as ImageCollectInfo;
  142. //若为身份证,则采用去黑边
  143. var data = CollectImage(info.Description.Contains("身份证"));
  144. if (data == null) return;
  145. info.Data = data;
  146. var imageSourceConverter = new ImageSourceConverter();
  147. info.ImageSource = imageSourceConverter.ConvertFrom(new System.IO.MemoryStream(info.Data)) as ImageSource;
  148. info.IsCollected = true;
  149. DataList.Items.Refresh();
  150. }
  151. }
  152. private byte[] CollectImage(bool isIDCard)
  153. {
  154. ////采用文件录入
  155. var dialog = new Microsoft.Win32.OpenFileDialog();
  156. dialog.ShowDialog(Application.Current.MainWindow);
  157. if (string.IsNullOrEmpty(dialog.FileName)) return null;
  158. return File.ReadAllBytes(dialog.FileName);
  159. //采集图片
  160. //var page = new CameraViewer(isIDCard);
  161. //ParentIPage.ShowPage(page, "扫描图像");
  162. //page.CloseCamera();
  163. //return page.ViewStateData.GetDictionaryItem<byte[]>("ImageData");
  164. }
  165. #region ParentIPage
  166. private IPage _parentIPage;
  167. /// <summary>
  168. /// Owner
  169. /// </summary>
  170. public IPage ParentIPage
  171. {
  172. get
  173. {
  174. if (_parentIPage == null)
  175. {
  176. _parentIPage = GetCurrentIPage(this);
  177. }
  178. return _parentIPage;
  179. }
  180. set { _parentIPage = value; }
  181. }
  182. private IPage GetCurrentIPage(DependencyObject visual)
  183. {
  184. IPage ret = null;
  185. if (visual != null)
  186. {
  187. var parent = LogicalTreeHelper.GetParent(visual);
  188. if (parent != null)
  189. {
  190. if (parent is IPage)
  191. ret = parent as IPage;
  192. else
  193. ret = GetCurrentIPage(parent);
  194. }
  195. }
  196. return ret;
  197. }
  198. #endregion
  199. }
  200. }