找回密码
 立即注册

QQ登录

只需一步,快速开始

mosquito

初级会员

24

主题

138

帖子

328

积分

初级会员

积分
328

[已处理] 图片加载的问题

mosquito
初级会员   /  发表于:2016-5-6 11:15  /   查看:5120  /  回复:8
您好:
       我现在想将导入图片功能中的图片暂存到本地,导入功能代码如下:
  1. private void ImportImage(object sender, EventArgs e)
  2.         {
  3.             if (Directory.Exists(_tempFilePath))
  4.             {
  5.                 Directory.Delete(_tempFilePath, true);
  6.             }
  7.             CodecsImageInfo info = new CodecsImageInfo();
  8.             string fileName = string.Empty;
  9.             using (OpenFileDialog dlg = new OpenFileDialog())
  10.             {
  11.                 if (dlg.ShowDialog() == DialogResult.OK)
  12.                 {
  13.                     imageViewer1.Items.Clear();
  14.                     info = _codecs.GetInformation(dlg.FileName, true);
  15.                     fileName = dlg.FileName;
  16.                 }
  17.             }
  18.             LeadSize thumbSize = imageViewer1.ItemSize;
  19.             using (WaitCursor waitCursor = new WaitCursor())
  20.             {
  21.                 imageViewer1.BeginUpdate();
  22.                 if (info.TotalPages > 0)
  23.                 {
  24.                     for (int i = 1; i < info.TotalPages + 1; i++)
  25.                     {
  26.                         RasterImage image = _codecs.Load(fileName, i);
  27.                         string fileNameTemp = _tempFilePath + (i - 1).ToString() + ".tif";
  28.                         if (!Directory.Exists(_tempFilePath))
  29.                         {
  30.                             Directory.CreateDirectory(_tempFilePath);
  31.                         }
  32.                         _codecs.Save(image, fileNameTemp, RasterImageFormat.Tif, image.BitsPerPixel);
  33.                         RasterImage tnImage = image.CreateThumbnail(thumbSize.Width, thumbSize.Height, image.BitsPerPixel, RasterViewPerspective.TopLeft, RasterSizeFlags.Bicubic);
  34.                         ImageViewerItem item = new ImageViewerItem();
  35.                         item.Image = tnImage;
  36.                         item.Text = string.Format("第{0}页", i);
  37.                         item.PageNumber = 1;
  38.                         imageViewer1.Items.Insert(i - 1, item);
  39.                         //image.Dispose();
  40.                         //tnImage.Dispose();
  41.                     }
  42.                     imageViewer1.Items[0].IsSelected = true;
  43.                     _scanCount = info.TotalPages - 1;
  44.                 }
  45.                 imageViewer1.EndUpdate();
  46.             }
  47.         }
复制代码
如果导入的文件里面的图片太多(200页以上)程序会出现假死的状态,这个有什么解决方法吗,是要用多线程来处理吗,不知道怎么做了,麻烦您指导下

8 个回复

倒序浏览
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2016-5-6 13:48:43
沙发
从代码上来看没有什么毛病。
你开任务管理器看一下,是不是内存吃完了。如果是,加上Dispose方法试试。
回复 使用道具 举报
mosquito
初级会员   /  发表于:2016-5-6 13:53:59
板凳
内存没有用完,就是加载200多张图片的话执行for循环的时候需要时间挺长,这时候程序看上去就跟死掉了似的,等for循环执行完了,程序就又可以操作了,有没办法处理这种情况呢?
回复 使用道具 举报
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2016-5-6 14:13:40
地板
mosquito 发表于 2016-5-6 13:53
内存没有用完,就是加载200多张图片的话执行for循环的时候需要时间挺长,这时候程序看上去就跟死掉了似的, ...

晕,原来你说的是线程阻塞的问题啊。。。。。
是的,加载200张图片并保存肯定是要耗费时间的,这样的话就需要多线程。
多线程防止UI线程阻塞的方法太多了,网上一搜一大堆,我就不罗嗦了。
我有个妙招,如果200页时间不是很长的话,可以再循环末尾加一句:Application.DoEvents()就可以了,这样防止UI线程阻塞。
不过最好使用多线程来做。
回复 使用道具 举报
mosquito
初级会员   /  发表于:2016-5-6 14:18:51
5#
本帖最后由 mosquito 于 2016-5-6 14:40 编辑

leadtools有没有列子呀,没写过关于线程的东西,有点无从下手呀
回复 使用道具 举报
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2016-5-6 14:41:12
6#
mosquito 发表于 2016-5-6 14:18
leadtools有没有列子呀,没写过关于线程的东西,有点无从下手呀

这个例子有的是,关键是藏在很多代码中,不好找。
你在百度里随便挑一个用就行了:https://www.baidu.com/s?wd=c%23% ... rsp=0&rsv_sug=1
回复 使用道具 举报
mosquito
初级会员   /  发表于:2016-5-6 16:03:17
7#
还是没有头绪呢,您能不能帮忙写个简单的demo或者跟我说下leadtools里哪个示例里类似的处理呀
回复 使用道具 举报
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2016-5-6 17:13:38
8#
mosquito 发表于 2016-5-6 16:03
还是没有头绪呢,您能不能帮忙写个简单的demo或者跟我说下leadtools里哪个示例里类似的处理呀

我的天~我给你的百度搜索链接里面,总共就10几行代码的多线程。
如果需要看LEADTOOLS的代码的话,可以看下DocumentViewer这个Demo,位置在:D:\LEADTOOLS 19\Examples\DotNet\CS\DocumentViewerDemo
这个Demo中加载多页图片用的就是多线程。你可以参考。
回复 使用道具 举报
mosquito
初级会员   /  发表于:2016-5-7 08:56:52
9#
好的,我就想看看大神这10几行代码是怎么写的,我这渣渣的水平让您见笑了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部