Example #1
0
        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();
        }
Example #2
0
        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);
            }
        }
Example #4
0
        /// <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);
        }
Example #6
0
 /// <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);
         }
     }
 }
Example #7
0
        /// <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);
            }
        }
Example #8
0
        /// <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();
            }
        }