using Baidu.Aip.ImageSearch;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using DevExpress.XtraEditors.DXErrorProvider;
using DevExpress.XtraEditors;
using Lskj.Util;
using Lskj.Core;
using System.Data.SqlClient;
using Lskj.Control.Model;
using Lskj.Control;
using Lskj.Business.Impl;
using System.Drawing.Imaging;
namespace Lskj.PictureComp
{
public partial class FrmMain : BaseForm
{
public FrmMain()
{
InitializeComponent();
Add_TextProvider.ValidationMode = ValidationMode.Auto;
SetRequired(Add_TextProvider, PageAdd_Tag1, PageAdd_Tag2, PageAdd_Brief, PageAdd_picEdit);
}
#region 公有变量
///
/// 选择文件
///
public OpenFileDialog FileDialog;
///
/// 右侧panel宽度
///
int panleWidth;
///
/// 构造文本填写约束
///
DXValidationProvider Add_TextProvider = new DXValidationProvider();
///
/// 接口连接
///
public ImageSearch client;
#endregion
#region 事件
#region 窗体加载时
///
/// 说明:窗体加载时
/// 创建人:王一帆
/// 创建日期:2021-06-15
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The instance containing the event data.
protected override void OnLoad(EventArgs e)
{
try
{
if (DBConfig.Instance.CreateConnection())
{
DataTable systemTab = SqlHelper.ExecuteDataTable("select * from p_systemtab");
DataRow dataRow = systemTab != null && systemTab.Rows.Count > 0 ? systemTab.Rows[0] : null;
string imageSearchApiKey = dataRow.Table.Columns.Contains("imageSearchApiKey") ? dataRow["imageSearchApiKey"] + "" : "";
string imageSearchSecretKey = dataRow.Table.Columns.Contains("imageSearchSecretKey") ? dataRow["imageSearchSecretKey"] + "" : "";
client = new Baidu.Aip.ImageSearch.ImageSearch(imageSearchApiKey, imageSearchSecretKey);
if (!BaseImpl.HasExistsTable("p_PictureComptab"))
{
CreationPictureTable();
this.panel_right.HorizontalScroll.Visible = false;//设置禁止水平滚动条
}
}
else
{
MessageUtil.Show("数据初始化失败!");
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
finally
{
Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this);
}
}
#endregion
#region 添加窗口图片点击事件
///
/// 说明:添加窗口图片点击事件
/// 创建人:唐德馨
/// 创建日期:2021-07-19
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The instance containing the event data.
private void OnPageAddPicEdit_Click(object sender, EventArgs e)
{
PageAdd_picEdit.Image = null;
PageAdd_Tag1.Text = null;
PageAdd_Tag2.Text = null;
PageAdd_Brief.Text = null;
panel_right.Controls.Clear();
labelRightToP.Text = "返回结果";
try
{
FileDialog = new OpenFileDialog();
FileDialog.Filter = "Picture(*.jpg,*.png,*.jpeg,*.bmp,*.gif)|*.jpg;*.png;*.jpeg;*.bmp|All files(*.*)|*.*";
if (FileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Image image = Image.FromFile(FileDialog.FileName);
Bitmap bm = new Bitmap(image, PageAdd_picEdit.Width, PageAdd_picEdit.Height);
this.PageAdd_picEdit.Image = bm;
image.Dispose();
}
}
catch (Exception ex)
{
DevExpress.XtraEditors.LabelControl lable_ShowResult = new DevExpress.XtraEditors.LabelControl();
lable_ShowResult.Parent = panel_right;
lable_ShowResult.Text = ex.ToString();
string Message = ErrorMessage.PromptErrorMessage(ex);
//MessageUtil.Show(Message,ex.Message);
}
}
#endregion
#region 添加窗口确认按钮点击事件
///
/// 说明:添加窗口确认按钮点击事件
/// 创建人:唐德馨
/// 创建日期:2021-07-19
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The instance containing the event data.
private void OnPageAddBtnCheck_Click(object sender, EventArgs e)
{
WaitForm.ShowForm();
try
{
if (Add_TextProvider.Validate())
{
var image = File.ReadAllBytes(FileDialog.FileName);
var options = new Dictionary();
options.Add("brief", PageAdd_Brief.Text);
options.Add("tags", string.Format("{0},{1}", PageAdd_Tag1.Text, PageAdd_Tag2.Text));
JObject result = client.SimilarAdd(image, options);
if (result.ContainsKey("error_code"))
{
switch (result["error_code"].ToString())
{
case "216681":
CreateErrorForm("添加失败!", global::Lskj.PictureComp.Properties.Resources.ErrorImg, "完全相同的图片不能重复入库!");
break;
case "216202":
CreateErrorForm("添加失败!", global::Lskj.PictureComp.Properties.Resources.ErrorImg, "上传的图片大小错误,请重新上传图片!");
break;
}
}
else
{
string insertField = "pic_contsign,pic_brief,pic_tag1,pic_tag2,picture";
string insertValues = string.Format("'{0}','{1}','{2}','{3}',@Picture", result["cont_sign"].ToString(), PageAdd_Brief.Text, PageAdd_Tag1.Text, PageAdd_Tag2.Text);
FileStream fs = new FileStream(FileDialog.FileName, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
Byte[] byData = br.ReadBytes((int)fs.Length);
fs.Close();
SqlParameter[] cmdParams = new SqlParameter[]
{
new SqlParameter("@Picture",SqlDbType.Binary,byData.Length),
};
cmdParams[0].Value = byData;
SqlHelper.ExecuteNonQuery(CommandType.Text, string.Format("insert into p_PictureComptab ({0}) values ({1})", insertField, insertValues), cmdParams);
CreateErrorForm("添加成功!", global::Lskj.PictureComp.Properties.Resources.RightImg);
}
}
}
catch (Exception ex)
{
CreateErrorForm("添加失败!", global::Lskj.PictureComp.Properties.Resources.ErrorImg);
string Message = ErrorMessage.PromptErrorMessage(ex);
//MessageUtil.Show(Message,ex.Message);
}
WaitForm.HideForm();
}
#endregion
#region 添加窗口清除按钮点击事件
///
/// 说明:添加窗口清除按钮点击事件
/// 创建人:唐德馨
/// 创建日期:2021-07-19
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The instance containing the event data.
private void OnPageAddBtnClear_Click(object sender, EventArgs e)
{
try
{
PageAdd_picEdit.Image = null;
PageAdd_Tag1.Text = null;
PageAdd_Tag2.Text = null;
PageAdd_Brief.Text = null;
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
#endregion
#region 搜索窗口图片点击事件
///
/// 说明:搜索窗口图片点击事件
/// 创建人:唐德馨
/// 创建日期:2021-07-19
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The instance containing the event data.
private void OnPageSelectPicEdit_Click(object sender, EventArgs e)
{
panleWidth = this.panel_right.Width;//获取panel宽度
FileDialog = new OpenFileDialog();
FileDialog.Filter = "Picture(*.jpg,*.png,*.jpeg,*.bmp,*.gif)|*.jpg;*.png;*.jpeg;*.bmp|All files(*.*)|*.*";
if (FileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
PageSelect_picEdit.Image = null;
panel_right.Controls.Clear();
Image image = Image.FromFile(FileDialog.FileName);
Bitmap bitmap_File = new Bitmap(image, PageSelect_picEdit.Width, PageSelect_picEdit.Height);
this.PageSelect_picEdit.Image = bitmap_File;
image.Dispose();
WaitForm.ShowForm();
try
{
byte[] image_read = File.ReadAllBytes(FileDialog.FileName);
Dictionary options = new Dictionary();
JObject result;
if (PageSelect_tag1.Text != "" && PageSelect_tag2.Text != "")
{
options.Add("tags", string.Format("{0},{1}", PageSelect_tag1.Text, PageSelect_tag2.Text));
options.Add("tag_logic", "0");
result = client.SimilarSearch(image_read, options);
}
else
{
result = client.SimilarSearch(image_read);
}
List