public static extern ReturnCode DsmWin32( [In, Out] TW_IDENTITY origin, [In, Out] TW_IDENTITY destination, DataGroups dg, DataArgumentType dat, Message msg, ref TW_IMAGEINFO data);
public ReturnCode Get(ref TW_IMAGEINFO info) { if (Is32Bit) { if (IsWin) { return(NativeMethods.DsmWin32(Session.Config.App32, Session.CurrentSource.Identity32, DataGroups.Image, DataArgumentType.ImageInfo, Message.Get, ref info)); } if (IsLinux) { return(NativeMethods.DsmLinux32(Session.Config.App32, Session.CurrentSource.Identity32, DataGroups.Image, DataArgumentType.ImageInfo, Message.Get, ref info)); } if (IsMac) { return(NativeMethods.DsmMac32(Session.Config.App32, Session.CurrentSource.Identity32, DataGroups.Image, DataArgumentType.ImageInfo, Message.Get, ref info)); } } if (IsWin) { return(NativeMethods.DsmWin64(Session.Config.App32, Session.CurrentSource.Identity32, DataGroups.Image, DataArgumentType.ImageInfo, Message.Get, ref info)); } if (IsLinux) { return(NativeMethods.DsmLinux64(Session.Config.App32, Session.CurrentSource.Identity32, DataGroups.Image, DataArgumentType.ImageInfo, Message.Get, ref info)); } if (IsMac) { return(NativeMethods.DsmMac64(Session.Config.App32, Session.CurrentSource.Identity32, DataGroups.Image, DataArgumentType.ImageInfo, Message.Get, ref info)); } return(ReturnCode.Failure); }
/// <summary> /// Get/Set image info information... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twimageinfo">IMAGEINFO structure</param> /// <returns>TWAIN status</returns> public STS DatImageinfo(DG a_dg, MSG a_msg, ref TW_IMAGEINFO a_twimageinfo) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twimageinfo = a_twimageinfo; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGEINFO; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twimageinfo = m_twaincommand.Get(lIndex).twimageinfo; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.IMAGEINFO.ToString(), a_msg.ToString(), ""); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryImageinfo(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } else { sts = (STS)WindowsTwaindsmDsmEntryImageinfo(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (TWAIN.GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryImageinfo(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } else { TW_IMAGEINFO_LINUX64 twimageinfolinux64 = default(TW_IMAGEINFO_LINUX64); sts = (STS)Linux64DsmEntryImageinfo(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.IMAGEINFO, a_msg, ref twimageinfolinux64); a_twimageinfo.XResolution = twimageinfolinux64.XResolution; a_twimageinfo.YResolution = twimageinfolinux64.YResolution; a_twimageinfo.ImageWidth = (int)twimageinfolinux64.ImageWidth; a_twimageinfo.ImageLength = (int)twimageinfolinux64.ImageLength; a_twimageinfo.SamplesPerPixel = twimageinfolinux64.SamplesPerPixel; a_twimageinfo.BitsPerSample_0 = twimageinfolinux64.BitsPerSample_0; a_twimageinfo.BitsPerSample_1 = twimageinfolinux64.BitsPerSample_1; a_twimageinfo.BitsPerSample_2 = twimageinfolinux64.BitsPerSample_2; a_twimageinfo.BitsPerSample_3 = twimageinfolinux64.BitsPerSample_3; a_twimageinfo.BitsPerSample_4 = twimageinfolinux64.BitsPerSample_4; a_twimageinfo.BitsPerSample_5 = twimageinfolinux64.BitsPerSample_5; a_twimageinfo.BitsPerSample_6 = twimageinfolinux64.BitsPerSample_6; a_twimageinfo.BitsPerSample_7 = twimageinfolinux64.BitsPerSample_7; a_twimageinfo.BitsPerPixel = twimageinfolinux64.BitsPerPixel; a_twimageinfo.Planar = twimageinfolinux64.Planar; a_twimageinfo.PixelType = twimageinfolinux64.PixelType; a_twimageinfo.Compression = twimageinfolinux64.Compression; } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryImageinfo(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ImageinfoToCsv(a_twimageinfo)); } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Convert the contents of a string to an callback structure... /// </summary> /// <param name="a_twimageinfo">A TWAIN structure</param> /// <param name="a_szImageinfo">A CSV string of the TWAIN structure</param> /// <returns>True if the conversion is successful</returns> public bool CsvToImageinfo(ref TW_IMAGEINFO a_twimageinfo, string a_szImageinfo) { // Init stuff... a_twimageinfo = default(TW_IMAGEINFO); // Build the string... try { string[] asz = CSV.Parse(a_szImageinfo); // Grab the values... a_twimageinfo.XResolution.Whole = (short)double.Parse(asz[0]); a_twimageinfo.XResolution.Frac = (ushort)((double.Parse(asz[0]) - (double)a_twimageinfo.XResolution.Whole) * 65536.0); a_twimageinfo.YResolution.Whole = (short)double.Parse(asz[1]); a_twimageinfo.YResolution.Frac = (ushort)((double.Parse(asz[1]) - (double)a_twimageinfo.YResolution.Whole) * 65536.0); a_twimageinfo.ImageWidth = (short)double.Parse(asz[2]); a_twimageinfo.ImageLength = int.Parse(asz[3]); a_twimageinfo.SamplesPerPixel = short.Parse(asz[4]); a_twimageinfo.BitsPerSample_0 = short.Parse(asz[5]); a_twimageinfo.BitsPerSample_1 = short.Parse(asz[6]); a_twimageinfo.BitsPerSample_2 = short.Parse(asz[7]); a_twimageinfo.BitsPerSample_3 = short.Parse(asz[8]); a_twimageinfo.BitsPerSample_4 = short.Parse(asz[9]); a_twimageinfo.BitsPerSample_5 = short.Parse(asz[10]); a_twimageinfo.BitsPerSample_6 = short.Parse(asz[11]); a_twimageinfo.BitsPerSample_7 = short.Parse(asz[12]); a_twimageinfo.Planar = ushort.Parse(asz[13]); a_twimageinfo.PixelType = (short)(TWPT)Enum.Parse(typeof(TWPT), asz[14].Remove(0, 5)); a_twimageinfo.Compression = (ushort)(TWCP)Enum.Parse(typeof(TWCP), asz[15].Remove(0, 5)); } catch { return (false); } // All done... return (true); }
/// <summary> /// Convert the contents of a image info to a string that we can show in /// our simple GUI... /// </summary> /// <param name="a_twimageinfo">A TWAIN structure</param> /// <returns>A CSV string of the TWAIN structure</returns> public string ImageinfoToCsv(TW_IMAGEINFO a_twimageinfo) { try { CSV csv = new CSV(); csv.Add(((double)a_twimageinfo.XResolution.Whole + ((double)a_twimageinfo.XResolution.Frac / 65536.0)).ToString()); csv.Add(((double)a_twimageinfo.YResolution.Whole + ((double)a_twimageinfo.YResolution.Frac / 65536.0)).ToString()); csv.Add(a_twimageinfo.ImageWidth.ToString()); csv.Add(a_twimageinfo.ImageLength.ToString()); csv.Add(a_twimageinfo.SamplesPerPixel.ToString()); csv.Add(a_twimageinfo.BitsPerSample_0.ToString()); csv.Add(a_twimageinfo.BitsPerSample_1.ToString()); csv.Add(a_twimageinfo.BitsPerSample_2.ToString()); csv.Add(a_twimageinfo.BitsPerSample_3.ToString()); csv.Add(a_twimageinfo.BitsPerSample_4.ToString()); csv.Add(a_twimageinfo.BitsPerSample_5.ToString()); csv.Add(a_twimageinfo.BitsPerSample_6.ToString()); csv.Add(a_twimageinfo.BitsPerSample_7.ToString()); csv.Add(a_twimageinfo.Planar.ToString()); csv.Add("TWPT_" + (TWPT)a_twimageinfo.PixelType); csv.Add("TWCP_" + (TWCP)a_twimageinfo.Compression); return (csv.Get()); } catch { return ("***error***"); } }
private static extern UInt16 MacosxDsmEntryImageinfo ( ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, DG dg, DAT dat, MSG msg, ref TW_IMAGEINFO twimageinfo );
private static extern UInt16 LinuxDsmEntryImageinfo ( ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, DG dg, DAT dat, MSG msg, ref TW_IMAGEINFO twimageinfo );