【问题标题】:Scanning using nTwain使用 nTwain 扫描
【发布时间】:2014-09-17 07:57:42
【问题描述】:

我确实使用来自 NuGet 的 nTwain lib 执行扫描。 我捕获 DataTransferred 事件以保存结果图像。 我得到的结果是一些 ImageInfo 和 null byte[] 大量信息。

有人知道这个库并且可以告诉我是否做错了吗?

void session_DataTransferred(object sender, NTwain.DataTransferredEventArgs e)
{
  Image img = ImageFromBytes(e.MemoryData);
  myDS.Close();
  session.Close();
}

e 仅与ImageInfo 一起提供。

更新

参数截图如果有用的话...

【问题讨论】:

    标签: c# twain scanning


    【解决方案1】:

    对于 NTwain,您应该拥有的不仅仅是该事件的 ImageInfo。具体来说,e 应该有ImageInfoMemDataNativeData,如屏幕截图所示。

    我还没有做很多事情,但我在控制台实用程序中所做的是检查是否e.NativeData != IntPtr.Zero 并从 DIB 指针中提取位图(Windows,它是 Linux 的 TIFF)。为此,我使用了另一个依赖项 CommonWin32.dll。我相信这与 NTwain 的初始解决方案包中包含的示例类似(在测试下查看示例控制台、WinForm 和 WPF 项目)。

    如果我想保存不同的文件类型,我会在那时进行编码。您可以使用给定的编码保存 System.Drawing.Image。显然,这可能会好很多(设置类型和压缩以使传输更小),但这是一个工作示例。

    if (e.NativeData != IntPtr.Zero)
    {
        Bitmap img = null;
        if (this._commands.CheckForDebug())
        {
            Console.WriteLine("Image data transferred.");
        }
        //Need to save out the data.
        img = e.NativeData.GetDrawingBitmap();
    
        if (img != null)
        {
             string fileName = "RandomFileName.";
    
             string fileType = this._commands.GetFileType();
    
             switch (fileType)
             {
                 case "png":
                    fileName += "png";
                    ImageExtensions.SavePNG(img, fileName, 50L);
                    break;
                 case "jpeg":
                    fileName += "jpeg";
                    ImageExtensions.SaveJPEG(img, fileName, 50L);
                    break;
                 default:
                    fileName += "png";
                    ImageExtensions.SavePNG(img, fileName, 50L);
                    break;
              }
        }
    }
    
    public static void SaveJPEG(Image img, string filePath, long quality)
        {
            var encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,   quality);
            img.Save(filePath, GetEncoder(ImageFormat.Jpeg), encoderParameters);
        }
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 2013-06-05
      • 2015-11-23
      • 1970-01-01
      • 2014-05-20
      • 2011-02-23
      • 2011-11-03
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多