using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Platform.Presentation.Interfaces; using System.IO; using System.ComponentModel; namespace TellerSystem.Controls.Ext.Controls { /// /// ImageManager.xaml 的交互逻辑 /// [DesignTimeVisible(false)] public partial class ImageManager : UserControl { public ImageManager() { InitializeComponent(); } /// /// 注册的图像采集信息列表 /// private List _registerImageCollectInfo = new List(); /// /// 注册图像采集动作 /// /// /// public void RegisterImageCollectInfo(string name, string description) { if (_registerImageCollectInfo.Exists(x => x.Name == name)) { throw new ArgumentOutOfRangeException(string.Format("图像采集控件:{0}采集项已经注册!", name)); } _registerImageCollectInfo.Add(new ImageCollectInfo { Name = name, Description = description, Collectable = false }); } /// /// 设置是否执行采集动作 /// /// /// public void SetCollectable(string name, bool flag, string description = null) { var item = _registerImageCollectInfo.FirstOrDefault(x => x.Name == name); if (item != null) { if (!string.IsNullOrEmpty(description)) item.Description = description; item.IsCollected = false; item.Collectable = flag; //更新数据源 DataList.ItemsSource = _registerImageCollectInfo.Where(x => x.Collectable); DataList.Items.Refresh(); } } /// /// 获取指定的图像采集数据 /// /// /// public byte[] GetCollectImage(string name) { byte[] ret = null; var item = _registerImageCollectInfo.FirstOrDefault(x => x.Name == name && x.Collectable && x.IsCollected); if (item != null) { //将图片转换成数据 ret = item.Data; } return ret; } /// /// 取出所有已采集的图像信息 /// /// public Dictionary GetAllCollectImage() { var ret = new Dictionary(); var list = _registerImageCollectInfo.FindAll(x => x.Collectable && x.IsCollected); foreach (var item in list) { if (item.IsCollected) { //取出图像数据 ret.Add(item.Name, item.Data); } } return ret; } /// /// 是否全部采集完毕 /// /// public bool IsCollectAll() { var list = _registerImageCollectInfo.Find(x => x.Collectable && !x.IsCollected); return list == null; } class ImageCollectInfo { /// /// 图像id /// public string Name { get; set; } /// /// 描述 /// public string Description { get; set; } /// /// 是否已采集 /// public bool IsCollected { get; set; } /// /// 是否参与采集 /// public bool Collectable { get; set; } /// /// 数据图像 /// public ImageSource ImageSource { get; set; } /// /// 图像数据 /// public byte[] Data { get; set; } } private void CollectButton_Click(object sender, RoutedEventArgs e) { //调用采集方法采集图片 var btn = sender as Button; if (btn != null && btn.Tag is ImageCollectInfo) { var info = btn.Tag as ImageCollectInfo; //若为身份证,则采用去黑边 var data = CollectImage(info.Description.Contains("身份证")); if (data == null) return; info.Data = data; var imageSourceConverter = new ImageSourceConverter(); info.ImageSource = imageSourceConverter.ConvertFrom(new System.IO.MemoryStream(info.Data)) as ImageSource; info.IsCollected = true; DataList.Items.Refresh(); } } private byte[] CollectImage(bool isIDCard) { ////采用文件录入 var dialog = new Microsoft.Win32.OpenFileDialog(); dialog.ShowDialog(Application.Current.MainWindow); if (string.IsNullOrEmpty(dialog.FileName)) return null; return File.ReadAllBytes(dialog.FileName); //采集图片 //var page = new CameraViewer(isIDCard); //ParentIPage.ShowPage(page, "扫描图像"); //page.CloseCamera(); //return page.ViewStateData.GetDictionaryItem("ImageData"); } #region ParentIPage private IPage _parentIPage; /// /// Owner /// public IPage ParentIPage { get { if (_parentIPage == null) { _parentIPage = GetCurrentIPage(this); } return _parentIPage; } set { _parentIPage = value; } } private IPage GetCurrentIPage(DependencyObject visual) { IPage ret = null; if (visual != null) { var parent = LogicalTreeHelper.GetParent(visual); if (parent != null) { if (parent is IPage) ret = parent as IPage; else ret = GetCurrentIPage(parent); } } return ret; } #endregion } }