private void Window_Closed(object sender, EventArgs e) { //清理预览图组数据 foreach (int iid in imgs.Values) { PreviewImg pi = (imgGrid.Children[iid] as ScrollViewer).Content as PreviewImg; var dicSort = from pireq in pi.Reqs orderby pireq.Value descending select pireq; foreach (KeyValuePair <int, System.Net.HttpWebRequest> req in dicSort) { req.Value.Abort(); } pi.Reqs.Clear(); } imgs.Clear(); descs.Clear(); oriIndex.Clear(); imgGrid.Children.Clear(); mainW.previewFrm = null; (new System.Threading.Thread( new System.Threading.ThreadStart(delegate() { //启动回收 System.Threading.Thread.Sleep(2000); GC.Collect(); }) )).Start(); }
private void CloseImg() { //close int oriId = selectedId; int imgc = imgs.Count; PreviewImg pi = (imgGrid.Children[imgs[oriId]] as ScrollViewer).Content as PreviewImg; pi.StopLoadImg(oriId, ""); //移除按钮和预览图 btns.Children.Remove(btns.Children[imgs[oriId]]); imgGrid.Children.Remove(imgGrid.Children[imgs[oriId]]); if (imgc > 0) { index = imgs[oriId]; } //删除关闭数据 imgs.Remove(oriId); descs.Remove(oriId); oriIndex.Remove(oriId); imgc = imgs.Count; if (imgc > 0) { //更新数组索引值 for (int i = index; i < imgc; i++) { int newindex = imgs[(int)((ToggleButton)btns.Children[i]).Content]; imgs[(int)((ToggleButton)btns.Children[i]).Content] = --newindex; } //切换预览图 //选择关闭的图前一张 index--; //没有前一张就选第一张 index = index < 0 ? 0 : index; //选中按钮 ToggleButton checkedTB = (ToggleButton)btns.Children[index]; checkedTB.IsChecked = true; //index为0时添加图片不能自增、因此需要在此设1 index = index < 1 ? 1 : index; GC.Collect(); } else { selectedId = index = 0; GC.Collect(); Close(); } }
public ProductImage(PreviewImg image) { if (image.ImgReal != null) { Real = new ProductImageParameters(image.ImgReal); } if (image.ImgSmall != null) { Preview = new ProductImageParameters(image.ImgSmall); } }
/// <summary> /// 保存预览图到文件 /// </summary> /// <param name="silent">静默模式</param> /// <param name="path">保存路径</param> /// <returns>预览文件类型</returns> private string SavePreview(bool silent, string path) { try { if (!((imgGrid.Children[imgs[selectedId]] as ScrollViewer).Content as PreviewImg).ImgLoaded) { ShowMessage("图片尚未加载完毕", MessageBoxButton.OK, MessageBoxImage.Warning); return(""); } PreviewImg pimg = (PreviewImg)((ScrollViewer)imgGrid.Children[imgs[selectedId]]).Content; switch (pimg.ImgType) { case "bmp": case "jpg": case "png": Image im = (Image)pimg.prewimg.Children[0]; DataHelpers.ImageToFile((BitmapSource)im.Source, pimg.ImgType, path); break; case "gif": AnimatedGIF gi = (AnimatedGIF)pimg.prewimg.Children[0]; DataHelpers.MemoryStreamToFile((MemoryStream)gi.GIFSource, path); break; default: throw new Exception(pimg.ImgType + "类型不支持保存"); } if (!silent) { ShowMessage("已成功保存至下载文件夹", MessageBoxButton.OK, MessageBoxImage.Information); } return(pimg.ImgType); } catch (Exception ex) { if (!silent) { ShowMessage("保存失败\r\n" + ex.Message, MessageBoxButton.OK, MessageBoxImage.Warning); } return(""); } }
private void Window_Closed(object sender, EventArgs e) { //清理预览图组数据 foreach (int iid in imgs.Values) { PreviewImg pi = (imgGrid.Children[iid] as ScrollViewer).Content as PreviewImg; var dicSort = from pireq in pi.Reqs orderby pireq.Value descending select pireq; foreach (KeyValuePair <int, System.Net.HttpWebRequest> req in dicSort) { req.Value.Abort(); } pi.Reqs.Clear(); } imgs.Clear(); descs.Clear(); oriIndex.Clear(); imgGrid.Children.Clear(); mainW.previewFrm = null; GC.Collect(2, GCCollectionMode.Optimized); }
/// <summary> /// 缩放 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click_2(object sender, RoutedEventArgs e) { if (!((imgGrid.Children[imgs[selectedId]] as ScrollViewer).Content as PreviewImg).ImgLoaded) { ShowMessage("图片尚未加载完毕", MessageBoxButton.OK, MessageBoxImage.Warning); } else { PreviewImg img = (imgGrid.Children[imgs[selectedId]] as ScrollViewer).Content as PreviewImg; if (img.isZoom) { (imgGrid.Children[imgs[selectedId]] as ScrollViewer).HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; (imgGrid.Children[imgs[selectedId]] as ScrollViewer).VerticalScrollBarVisibility = ScrollBarVisibility.Auto; img.ImgZoom(false, false); } else { (imgGrid.Children[imgs[selectedId]] as ScrollViewer).HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; (imgGrid.Children[imgs[selectedId]] as ScrollViewer).VerticalScrollBarVisibility = ScrollBarVisibility.Disabled; img.ImgZoom(false); } } }
/// <summary> /// 复制预览图 /// 以QQ剪切板格式创建 /// http://blog.csdn.net/crystal_lz/article/details/51737713 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MenuItem_Click(object sender, RoutedEventArgs e) { try { //取当前预览内容、类型、保存路径 PreviewImg pimg = (PreviewImg)((ScrollViewer)imgGrid.Children[imgs[selectedId]]).Content; bool novprew = false; string ttype = pimg.ImgType; string tempfile = GetTempFilePath(); if (!File.Exists(tempfile)) { if (SavePreview(true, tempfile) == "") { return; } } //构建剪贴对象 IDataObject clipobj = new DataObject(); //根据类型分类处理 switch (ttype) { case "bmp": case "jpg": case "png": case "gif": //--- 复制编辑框格式 --- StringBuilder sb = new StringBuilder(); sb.Append("<QQRichEditFormat><Info version=\"1001\"></Info>"); sb.AppendFormat("<EditElement type=\"1\" filepath=\"{0}\" shortcut=\"\"></EditElement>", tempfile); sb.Append("<EditElement type=\"0\"><![CDATA[]]></EditElement></QQRichEditFormat>"); byte[] bydate = Encoding.UTF8.GetBytes(sb.ToSafeString()); clipobj.SetData("QQ_Unicode_RichEdit_Format", new MemoryStream(bydate)); clipobj.SetData("QQ_RichEdit_Format", new MemoryStream(bydate)); //--- 复制图像数据 --- System.Drawing.Image di = System.Drawing.Image.FromStream(pimg.Strs); clipobj.SetData(DataFormats.Dib, di); break; default: novprew = true; break; } if (novprew) { ShowMessage(ttype + "类型不支持复制预览,仅复制了文件", MessageBoxButton.OK, MessageBoxImage.Warning); } //--- 复制预览文件 --- string[] tempfs = new string[] { tempfile }; clipobj.SetData("FileDrop", tempfs); clipobj.SetData("FileNameW", tempfs); clipobj.SetData("FileName", tempfs); //置入剪贴对象到剪贴板 Clipboard.SetDataObject(clipobj, true); } catch (Exception ex) { ShowMessage("复制预览 " + selectedId + " 失败\r\n" + ex.Message, MessageBoxButton.OK, MessageBoxImage.Warning); } }
/// <summary> /// 添加预览 /// </summary> /// <param name="img"></param> /// <param name="parentIndex"></param> /// <param name="needReferer"></param> public void AddPreview(Img img, int parentIndex, string needReferer) { if (!imgs.ContainsKey(img.Id)) { imgs.Add(img.Id, index++); oriIndex.Add(img.Id, parentIndex); descs.Add(img.Id, img); //添加预览图分页按钮 ToggleButton btn = new ToggleButton { Content = img.Id, Margin = new Thickness(3, 1, 3, 1) }; btn.Checked += new RoutedEventHandler(btn_Click); btns.Children.Add(btn); //初始化预览图 PreviewImg prei = new PreviewImg(this, img); prei.MouseLeftButtonUp += new MouseButtonEventHandler(delegate(object s1, MouseButtonEventArgs ea) { preMX = 0; preMY = 0; }); prei.MouseLeftButtonDown += new MouseButtonEventHandler(delegate(object s1, MouseButtonEventArgs ea) { preMX = 0; preMY = 0; }); prei.MouseDown += new MouseButtonEventHandler(delegate(object s1, MouseButtonEventArgs ea) { //中键缩放 if (ea.MiddleButton == MouseButtonState.Pressed) { Button_Click_2(null, null); } }); prei.MouseMove += new MouseEventHandler(delegate(object s1, MouseEventArgs ea) { //拖动 if (ea.LeftButton == MouseButtonState.Pressed) { if (preMY != 0 && preMX != 0) { int offX = (int)(ea.GetPosition(LayoutRoot).X) - preMX; int offY = (int)(ea.GetPosition(LayoutRoot).Y) - preMY; ScrollViewer sc = (imgGrid.Children[imgs[selectedId]] as ScrollViewer); sc.ScrollToHorizontalOffset(sc.HorizontalOffset - offX); sc.ScrollToVerticalOffset(sc.VerticalOffset - offY); } preMX = (int)(ea.GetPosition(LayoutRoot).X); preMY = (int)(ea.GetPosition(LayoutRoot).Y); } }); //加入预览图控件 imgGrid.Children.Add(new ScrollViewer() { Content = prei, Visibility = Visibility.Hidden, HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled, VerticalScrollBarVisibility = ScrollBarVisibility.Disabled }); //开始下载图片 prei.DownloadImg(needReferer); if (selectedId == 0) { (btns.Children[btns.Children.Count - 1] as ToggleButton).IsChecked = true; } ChangePreBtnText(); } }