找回密码
 立即注册

QQ登录

只需一步,快速开始

776074520

注册会员

1

主题

13

帖子

24

积分

注册会员

积分
24
最新发帖
776074520
注册会员   /  发表于:2020-3-19 22:01  /   查看:11602  /  回复:24
1、twain扫描后图片缩略图放入RasterThumbnailBrowser中,如何设置显示大小。
2、twain扫描一次后,再次点击扫描会发生崩溃、卡死等情况,如何解决,有相关demo吗?
求帮助,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

24 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-20 09:58:26
沙发
我看你这边用的扫描仪应该也是

我用LEADTOOLS 20\Shortcuts\Scanning (TWAIN & WIA)\.NET Framework Class Libraries\TWAIN\TWAIN 32-bit.exe测试了一下多次扫描没有问题,

你现在的项目是在这个基础上改的吧,可以检查一下修改的代码是否有问题,无法解决的话请上传项目我来验证

关于第一个问题,在V20版本中已经没有这个控件了,如果你用的是V19,请参考
https://www.leadtools.com/help/l ... umbnailbrowser.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
776074520
注册会员   /  发表于:2020-3-20 15:26:41
板凳
我看了下,还是不知道怎么设置缩略图显示大小,是哪个字段控制的吗?我自己重新写了一个第二次扫描的时候就会卡死,我想要实现扫描后将图片保存本地,并将扫描的图片展示在窗口控件上。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using Leadtools;
  10. using Leadtools.Twain;
  11. using Leadtools.Codecs;
  12. using Leadtools.WinForms;
  13. using Leadtools.Drawing;
  14. using System.IO;

  15. namespace AcquiringImage
  16. {
  17.     public partial class Form1 : Form
  18.     {

  19.         private TwainSession twnSession;

  20.         private RasterCodecs rasterCodecs = new RasterCodecs();

  21.         public TwainTransferMechanism _transferMode = TwainTransferMechanism.Native;

  22.         public string dossierFilePath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\');

  23.         public string fileOrgExtension = "jpg";

  24.         public Form1()
  25.         {
  26.             InitializeComponent();

  27.             InitMyControls();
  28.         }

  29.         private void InitMyControls()
  30.         {

  31.             _browser = new RasterThumbnailBrowser();
  32.             _browser.Codecs = new RasterCodecs();
  33.             _browser.Dock = DockStyle.Fill;

  34.             this.panel1.Controls.Add(_browser);
  35.             _browser.BringToFront();
  36.             _browser.ItemSpacingSize = new Size(10, 10);
  37.         }

  38.         private void Form1_Load(object sender, EventArgs e)
  39.         {
  40.             TwainStart();
  41.             //InitMyControls();
  42.            
  43.         }

  44.         private void TwainStart()
  45.         {
  46.             if (twnSession == null)
  47.             {
  48.                 twnSession = new TwainSession();

  49.                 if (TwainSession.IsAvailable(this))
  50.                 {
  51.                     twnSession.Startup(this, string.Empty, "文档扫描", string.Empty, string.Empty, TwainStartupFlags.InitializeMultithreaded);
  52.                     twnSession.AcquirePage += new EventHandler<TwainAcquirePageEventArgs>(twnSession_AcquirePage);
  53.                 }
  54.             }
  55.         }

  56.         private void buttonSelectSource_Click(object sender, EventArgs e)
  57.         {
  58.             try
  59.             {
  60.                 //TwainStart();

  61.                 twnSession.SelectSource(string.Empty);
  62.             }
  63.             catch (Exception ex)
  64.             {
  65.                 MessageBox.Show(this, ex.Message);
  66.             }
  67.         }

  68.         private void setParam_Click(object sender, EventArgs e)
  69.         {
  70.             this.twnSession.EnableShowUserInterfaceOnly = true;
  71.             this.twnSession.ShowTemplateDialog(AppDomain.CurrentDomain.BaseDirectory + @"\Twain.nko");
  72.             this.Activate();
  73.         }

  74.         private void buttonAcquire_Click(object sender, EventArgs e)
  75.         {
  76.             try
  77.             {
  78.                 //SetTransferMode();
  79.                 // Acquire one or more images from a TWAIN source.
  80.                 twnSession.Acquire(TwainUserInterfaceFlags.None);
  81.                 Application.DoEvents();
  82.                 //twnSession.Acquire(TwainUserInterfaceFlags.Show | TwainUserInterfaceFlags.Modal);
  83.             }
  84.             catch (Exception ex)
  85.             {
  86.                 MessageBox.Show(this, ex.Message);
  87.             }
  88.         }

  89.         private void SetTransferMode()
  90.         {
  91.             using (TwainCapability twnCap = new TwainCapability())
  92.             {
  93.                 try
  94.                 {
  95.                     twnCap.Information.Type = TwainCapabilityType.ImageTransferMechanism;
  96.                     twnCap.Information.ContainerType = TwainContainerType.OneValue;

  97.                     twnCap.OneValueCapability.ItemType = TwainItemType.Uint16;
  98.                     twnCap.OneValueCapability.Value = (UInt16)_transferMode;

  99.                     // Set the value of ICAP_XFERMECH (Image Transfer Mechanism) capability
  100.                     twnSession.SetCapability(twnCap, TwainSetCapabilityMode.Set);
  101.                 }
  102.                 catch (Exception ex)
  103.                 {
  104.                     MessageBox.Show(this, ex.Message);
  105.                 }
  106.             }
  107.         }



  108.         private void InitClass()
  109.         {

  110.             InitMyControls();
  111.             _browser.LoadThumbnails(Path.Combine(dossierFilePath, string.Empty, "Temp", "OriginalFile"), "*.*", RasterThumbnailBrowserLoadFlags.Block);
  112.             _browser.Refresh();
  113.             _browser.Items.Add(new RasterImageListItem());
  114.             _browser.EnableBroswerWatcher = true;
  115.         }

  116.         

  117.         private void twnSession_AcquirePage(object sender, TwainAcquirePageEventArgs e)
  118.         {
  119.             Application.DoEvents();
  120.             GC.Collect();

  121.             string rootPath = Path.Combine(dossierFilePath, string.Empty, "Temp", "OriginalFile");
  122.             string path = string.Format(rootPath + "\\{0}.{1}", Guid.NewGuid().ToString().ToUpper().Replace("-", string.Empty), fileOrgExtension);

  123.             rasterCodecs.Save(e.Image, path, RasterImageFormat.Jpeg, 24);

  124.             Application.DoEvents();

  125.             InsertImage(path);
  126.         }

  127.         private void InsertImage(string fileFullName)
  128.         {

  129.             RasterImageListItem imageItem = null;
  130.             Image img = null;
  131.             RasterImage image = null;
  132.             StreamReader fs = new StreamReader(fileFullName);

  133.             img = Image.FromStream(fs.BaseStream);

  134.             img = img.GetThumbnailImage(183, 240, null, System.IntPtr.Zero);
  135.             image = RasterImageConverter.ConvertFromImage(img, ConvertFromImageOptions.None);

  136.             img.Dispose();
  137.             fs.Close();
  138.             fs.Dispose();



  139.             imageItem = new RasterImageListItem() { Image = image.CloneAll(), Tag = 1, FileName = fileFullName, Text = string.Empty };
  140.             image.Dispose();

  141.             _browser.Items.Add(imageItem);
  142.             _browser.BeginUpdate();
  143.             _browser.EndUpdate();
  144.             _browser.ScrollItems(_browser.Items.Count - 1);
  145.             

  146.             GC.Collect();

  147.             }

  148.         #region 获取当前页码

  149.         /// <summary>
  150.         /// 获取当前页码
  151.         /// </summary>
  152.         private int CurrentPageIndex
  153.         {
  154.             get
  155.             {
  156.                 for (int i = 0; i < _browser.Items.Count; i++)
  157.                 {
  158.                     if (_browser.Items[i].Selected)
  159.                         return i;
  160.                 }

  161.                 return 0;
  162.             }
  163.         }

  164.         #endregion


  165.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  166.         {
  167.             try
  168.             {
  169.                 twnSession.Shutdown();
  170.             }
  171.             catch (Exception ex)
  172.             {
  173.                 MessageBox.Show(this, ex.Message);
  174.             }
  175.         }


  176.     }

  177. }
复制代码
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-20 15:37:46
地板
请将项目压缩后作为附件上传上来
回复 使用道具 举报
776074520
注册会员   /  发表于:2020-3-20 23:28:28
5#
请帮忙看看,我该怎么改,有哪些地方有问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-24 10:01:02
6#
本帖最后由 Richard.Ma 于 2020-3-24 10:24 编辑

使用您发过来的数据进行了测试,未能发现第二次扫描时错误的问题,我这边用的是20版本,如果你在用19版本的话,建议你下载一个20版本测试一下

另外你说的设置缩略图大小可以用下面的代码
  1.             _browser.ItemImageSize = new Size(200, 300);
  2.             _browser.ItemSize= new Size(200, 300);
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
776074520
注册会员   /  发表于:2020-3-24 22:34:13
7#
好的,我试试
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-25 09:03:43
8#
好的
回复 使用道具 举报
776074520
注册会员   /  发表于:2020-3-25 10:22:02
9#
请问一下,现在我需要将扫描文件传给其他接口调用,也就是e.Image如何转为图片的base64字符串形式,方便传输。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-25 11:52:34
10#
扫描获取到的图像是RasterImage格式的,如果要转base64的话,可以先使用RasterImageConverter.ConvertToImage转换为System.Drawing.Image格式,
然后在转换为base64
https://www.leadtools.com/help/s ... ge-and-gdi-gdi.html

关于Image转base64,这个不属于leadtools的功能,你可以参考网上的教程,我帮你找了一个可以试试看
https://www.cnblogs.com/rinack/p/4260213.html


回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部