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.

308 lines
12 KiB

1 month ago
  1. using AForge.Controls;
  2. using ShenTun.ImageCollection.Common;
  3. using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Reflection;
  12. using System.Security.Policy;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Forms;
  16. namespace ShenTun.ImageCollection.AForgeCamera
  17. {
  18. public partial class FrmImageList : Form
  19. {
  20. private RequestImageEdit requset;
  21. private bool isLoad = false;
  22. private string defalutImg = string.Empty;
  23. public FrmImageList(RequestImageEdit requestImage)
  24. {
  25. SetStyle(ControlStyles.AllPaintingInWmPaint, true);
  26. SetStyle(ControlStyles.UserPaint, true);
  27. SetStyle(ControlStyles.DoubleBuffer, true);
  28. InitializeComponent();
  29. requset = requestImage;
  30. lvList.SmallImageList = smallList;
  31. }
  32. private void FrmImageList_Load(object sender, EventArgs e)
  33. {
  34. try
  35. {
  36. //string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  37. //defalutImg = string.Format("{0}\\defalut.jpg", path);
  38. //imageView1.loadImageAndInit(defalutImg, null);
  39. InitCtrl();
  40. DowloadFile();
  41. if (this.lvList.Items.Count == 0) return;
  42. int index = this.lvList.SelectedIndices.Count > 0 ?
  43. this.lvList.SelectedIndices[0] : 0;
  44. RequestImage image = lvList.Items[index].Tag as RequestImage;
  45. ShowImage(image);
  46. }
  47. catch (Exception ex)
  48. {
  49. MessageBox.Show("载入图片异常:" + ex.Message);
  50. }
  51. }
  52. private void InitCtrl()
  53. {
  54. lvList.Items.Clear();
  55. lvList.Columns.Clear();
  56. //lvList.ShowGroups = false;
  57. lvList.View = View.Details;//详细信息
  58. #region 列标头信息 添加
  59. lvList.Columns.Add("文件名", 300, HorizontalAlignment.Left);
  60. lvList.Columns.Add("修改日期", 300, HorizontalAlignment.Left);
  61. lvList.Columns.Add("类型", 80, HorizontalAlignment.Left);
  62. lvList.Columns.Add("大小", 60, HorizontalAlignment.Left);
  63. #endregion
  64. }
  65. private void ShowImage(RequestImage requestImage)
  66. {
  67. if (requestImage == null) return;
  68. SelectImageInfo imageInfo = new SelectImageInfo()
  69. {
  70. ImageSvr = requset.ImageSvr,
  71. PeisApiUrl = requset.PeisApiUrl,
  72. Token = requset.Token,
  73. Image = requestImage
  74. };
  75. using (FileStream fileStream = File.Open(requestImage.localPathName, FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite))
  76. {
  77. // 创建一个字节数组来保存FileStream的内容
  78. byte[] fileBytes = new byte[fileStream.Length];
  79. fileStream.Read(fileBytes, 0, fileBytes.Length);
  80. // 使用字节数组创建MemoryStream
  81. using (MemoryStream memoryStream = new MemoryStream(fileBytes))
  82. {
  83. imageEdit1.LoadImageAndInit(memoryStream, imageInfo);
  84. }
  85. }
  86. }
  87. private void DowloadFile()
  88. {
  89. if (string.IsNullOrEmpty(requset.ImageSvr))
  90. {
  91. MessageBox.Show("获取ImageSvr字段失败");
  92. return;
  93. }
  94. if (requset.Images == null)
  95. {
  96. MessageBox.Show("获取Images字段失败");
  97. return;
  98. }
  99. smallList.Images.Clear();
  100. int index = 0;//定义索引
  101. var objStr = requset.Images.ToString();
  102. List<RequestImage> imgList=new List<RequestImage>();
  103. if (objStr.Contains("["))
  104. {
  105. var array = JsonHelper.DeserializeObject<RequestImage[]>(objStr);
  106. imgList=array.ToList();
  107. }
  108. else {
  109. var obj = JsonHelper.DeserializeObject<RequestImage>(objStr);
  110. imgList.Add(obj);
  111. }
  112. Uri uri = new Uri(requset.ImageSvr);
  113. progressBar1.Visible = true;
  114. foreach (RequestImage img in imgList) {
  115. if (!File.Exists(img.localPathName)) {
  116. int iPos=img.pictureFilename.LastIndexOf("/");
  117. string localFilename= img.pictureFilename.Substring(iPos+1);
  118. Uri uri2 = new Uri(uri, img.pictureFilename);
  119. string url = uri2.ToString();
  120. string dirPath= Path.GetDirectoryName(img.localPathName);
  121. try
  122. {
  123. if (!Directory.Exists(dirPath))
  124. {
  125. Directory.CreateDirectory(dirPath);
  126. }
  127. if (string.IsNullOrEmpty(img.localPathName))
  128. {
  129. string filePath = ImageHelper.GetLoaclPath(requset.ImagePath, requset.AsbitemName);
  130. string fileName = string.Format("{0}\\{1}", filePath, localFilename);
  131. img.localPathName = fileName;
  132. if (File.Exists(fileName))
  133. {
  134. File.Delete(fileName);
  135. }
  136. img.localPathName = fileName;
  137. }
  138. }
  139. catch {
  140. string filePath = ImageHelper.GetLoaclPath(requset.ImagePath, requset.AsbitemName);
  141. if (!Directory.Exists(filePath))
  142. {
  143. Directory.CreateDirectory(filePath);
  144. }
  145. string fileName = string.Format("{0}\\{1}", filePath, localFilename);
  146. img.localPathName = fileName;
  147. if (File.Exists(fileName))
  148. {
  149. File.Delete(fileName);
  150. }
  151. img.localPathName = fileName;
  152. }
  153. DownloadFile(url, img.localPathName,this.progressBar1);
  154. }
  155. }
  156. progressBar1.Visible = false;
  157. InitCtrl();
  158. foreach (RequestImage imge in imgList) {
  159. using (FileStream image = new FileStream(imge.localPathName, FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite))
  160. {
  161. Image img = Image.FromStream(image, false, true);
  162. string PthName = Path.GetFileNameWithoutExtension(imge.localPathName);//获取图片的名称
  163. smallList.Images.Add(PthName, img);//小图标显示
  164. //dic.Add(index, imge.localPathName);//index 图片的索引 fpath 图片的路径
  165. ListViewItem li = new ListViewItem();
  166. li.ImageIndex = index;//获取图片的索引
  167. li.Text = PthName;//获取图片的文本信息
  168. li.Tag = imge;
  169. li.SubItems.Add(File.GetCreationTime(imge.localPathName).ToString());//获取文件修改的日期
  170. li.SubItems.Add(Path.GetExtension(imge.localPathName));//文件的类型
  171. long length = new FileInfo(imge.localPathName).Length;//获取文件大小 字节
  172. li.SubItems.Add((length / 1024).ToString());//KB
  173. lvList.Items.Add(li);//添加到集合中显示
  174. }
  175. index++;
  176. }
  177. //lvList.GridLines = true;//显示网格
  178. isLoad = true;
  179. }
  180. public void DownloadFile(string url, string filename, System.Windows.Forms.ProgressBar prog)
  181. {
  182. try
  183. {
  184. System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
  185. System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
  186. long totalBytes = myrp.ContentLength;
  187. if (prog != null)
  188. {
  189. prog.Maximum = (int)totalBytes;
  190. }
  191. using (System.IO.Stream st = myrp.GetResponseStream())
  192. {
  193. using (System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.CreateNew))
  194. {
  195. long totalDownloadedByte = 0;
  196. byte[] by = new byte[1024];
  197. int osize = st.Read(by, 0, (int)by.Length);
  198. while (osize > 0)
  199. {
  200. totalDownloadedByte = osize + totalDownloadedByte;
  201. System.Windows.Forms.Application.DoEvents();
  202. so.Write(by, 0, osize);
  203. if (prog != null)
  204. {
  205. prog.Value = (int)totalDownloadedByte;
  206. }
  207. osize = st.Read(by, 0, (int)by.Length);
  208. }
  209. }
  210. }
  211. }
  212. catch (System.Exception ex)
  213. {
  214. throw new Exception(ex.Message);
  215. }
  216. }
  217. private void btnLoad_Click(object sender, EventArgs e)
  218. {
  219. try
  220. {
  221. btnLoad.Enabled = false;
  222. DowloadFile();
  223. }
  224. catch (Exception ex) {
  225. progressBar1.Visible = false;
  226. MessageBox.Show("加载图片异常:" + ex.Message);
  227. }
  228. finally
  229. {
  230. btnLoad.Enabled = true;
  231. }
  232. }
  233. private void btnPre_Click(object sender, EventArgs e)
  234. {
  235. try
  236. {
  237. if (this.lvList.Items.Count == 0) return;
  238. int index = this.lvList.SelectedIndices.Count > 0 ?
  239. this.lvList.SelectedIndices[0] - 1 : 0;
  240. if (index >= 0 && index < this.lvList.Items.Count)
  241. {
  242. this.lvList.SelectedIndices.Clear();
  243. this.lvList.SelectedIndices.Add(index);
  244. this.lvList.Items[index].Focused = true;
  245. RequestImage image= lvList.Items[index].Tag as RequestImage;
  246. ShowImage(image);
  247. }
  248. }
  249. catch (Exception ex)
  250. {
  251. MessageBox.Show("加载上一张异常:" + ex.Message);
  252. }
  253. }
  254. private void btnNext_Click(object sender, EventArgs e)
  255. {
  256. try
  257. {
  258. if (this.lvList.Items.Count == 0) return;
  259. int index = this.lvList.SelectedIndices.Count > 0 ?
  260. this.lvList.SelectedIndices[0] + 1 : 0;
  261. if (index >= 0 && index < this.lvList.Items.Count)
  262. {
  263. this.lvList.SelectedIndices.Clear();
  264. this.lvList.SelectedIndices.Add(index);
  265. this.lvList.Items[index].Focused = true;
  266. RequestImage image = lvList.Items[index].Tag as RequestImage;
  267. ShowImage(image);
  268. }
  269. }
  270. catch (Exception ex)
  271. {
  272. MessageBox.Show("加载下一张异常:" + ex.Message);
  273. }
  274. }
  275. private void lvList_DoubleClick(object sender, EventArgs e)
  276. {
  277. try
  278. {
  279. if (this.lvList.Items.Count == 0) return;
  280. int index = this.lvList.SelectedIndices.Count > 0 ?
  281. this.lvList.SelectedIndices[0] : 0;
  282. RequestImage image = lvList.Items[index].Tag as RequestImage;
  283. ShowImage(image);
  284. }
  285. catch (Exception ex)
  286. {
  287. MessageBox.Show("双击加载图片异常:" + ex.Message);
  288. }
  289. }
  290. }
  291. }