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
}
}