예제 #1
0
        private void Session_TransferReady(object sender, TransferReadyEventArgs e)
        {
            var transferMechanism = Session.CurrentSource.Capabilities.ICapXferMech.GetCurrent();

            if (transferMechanism == XferMech.File)
            {
                var formats            = Session.CurrentSource.Capabilities.ICapImageFileFormat.GetValues();
                var scannerImageFormat = formats.Contains(FileFormat.Tiff) ? FileFormat.Tiff : FileFormat.Bmp;

                var fileSetup = new TWSetupFileXfer
                {
                    Format   = scannerImageFormat,
                    FileName = GetUniqueName(Path.GetTempPath(), "twain-test", "." + scannerImageFormat)
                };
            }
        }
예제 #2
0
        void Session_TransferReady(object sender, TransferReadyEventArgs e)
        {
            var mech = session.CurrentSource.Capabilities.ICapXferMech.GetCurrent();

            if (mech == XferMech.File)
            {
                var formats    = session.CurrentSource.Capabilities.ICapImageFileFormat.GetValues();
                var wantFormat = formats.Contains(FileFormat.Tiff) ? FileFormat.Tiff : FileFormat.Bmp;

                var fileSetup = new TWSetupFileXfer
                {
                    Format   = wantFormat,
                    FileName = GetUniqueName(Path.GetTempPath(), "twain-test", "." + wantFormat)
                };
                session.CurrentSource.DGControl.SetupFileXfer.Set(fileSetup);
            }
        }
    private void OnTransferReady(object sender, TransferReadyEventArgs e)
    {
        _dataSource.Capabilities.CapFeederEnabled.SetValue(BoolType.False);
        _dataSource.Capabilities.CapDuplexEnabled.SetValue(BoolType.False);
        _dataSource.Capabilities.ICapPixelType.SetValue(PixelType.RGB);
        _dataSource.Capabilities.ICapUnits.SetValue(Unit.Inches);
        TWImageLayout imageLayout;

        _dataSource.DGImage.ImageLayout.Get(out imageLayout);
        imageLayout.Frame = new TWFrame
        {
            Left   = 0,
            Right  = 210 * 0.393701f,
            Top    = 0,
            Bottom = 297 * 0.393701f
        };
        _dataSource.DGImage.ImageLayout.Set(imageLayout);
        _dataSource.Capabilities.ICapXResolution.SetValue(150);
        _dataSource.Capabilities.ICapYResolution.SetValue(150);
        if (_cancel)
        {
            e.CancelAll = true;
        }
    }
예제 #4
0
 private void Session_TransferReady(object sender, TransferReadyEventArgs e)
 {
 }
예제 #5
0
 void session_TransferReady(object sender, TransferReadyEventArgs e)
 {
 }
예제 #6
0
        /// <summary>
        /// Performs the TWAIN transfer routine at state 6.
        /// </summary>
        public static void DoTransferRoutine(ITwainSessionInternal session)
        {
            #region get xfer types

            bool       xferImage   = true; // default to always xfer image
            bool       xferAudio   = false;
            DataGroups xferGroup   = DataGroups.None;
            XferMech   imgXferMech = XferMech.Native;
            XferMech   audXferMech = XferMech.Native;
            if (session.DGControl.XferGroup.Get(ref xferGroup) == ReturnCode.Success)
            {
                xferAudio = (xferGroup & DataGroups.Audio) == DataGroups.Audio;
                // check for Plustek OpticSlim 2680H, this scanner returns wrong xferGroup after first scanning
                if (session.CurrentSource.Identity.ProductName.IndexOf("Plustek", StringComparison.OrdinalIgnoreCase) > -1 &&
                    session.CurrentSource.Identity.ProductName.IndexOf("OpticSlim", StringComparison.OrdinalIgnoreCase) > -1 &&
                    session.CurrentSource.Identity.ProductName.IndexOf("2680H", StringComparison.OrdinalIgnoreCase) > -1)
                {
                    xferImage = true;
                }
                else
                {
                    xferImage = xferGroup == DataGroups.None || (xferGroup & DataGroups.Image) == DataGroups.Image;
                }
            }
            // some DS end up getting none but we will assume it's image
            if (xferImage)
            {
                imgXferMech = session.CurrentSource.Capabilities.ICapXferMech.GetCurrent();
            }
            if (xferAudio)
            {
                var mech = session.CurrentSource.Capabilities.ACapXferMech.GetCurrent();
            }

            #endregion

            var pending = new TWPendingXfers();
            var rc      = session.DGControl.PendingXfers.Get(pending);
            if (rc == ReturnCode.Success)
            {
                do
                {
                    #region raise xfer ready

                    var preXferArgs = new TransferReadyEventArgs(session.CurrentSource, pending.Count, pending.EndOfJob);;
                    session.SafeSyncableRaiseEvent(preXferArgs);

                    #endregion

                    #region actually handle xfer

                    if (preXferArgs.CancelAll || session.CloseDSRequested)
                    {
                        rc = session.DGControl.PendingXfers.Reset(pending);
                    }
                    else
                    {
                        if (!preXferArgs.CancelCurrent)
                        {
                            if (xferImage)
                            {
                                switch (imgXferMech)
                                {
                                case XferMech.Memory:
                                    rc = DoImageMemoryXfer(session);
                                    break;

                                case XferMech.File:
                                    rc = DoImageFileXfer(session);
                                    break;

                                case XferMech.MemFile:
                                    rc = DoImageMemoryFileXfer(session);
                                    break;

                                case XferMech.Native:
                                default:     // always assume native
                                    rc = DoImageNativeXfer(session);
                                    break;
                                }
                            }
                            if (xferAudio)
                            {
                                switch (audXferMech)
                                {
                                case XferMech.File:
                                    rc = DoAudioFileXfer(session);
                                    break;

                                case XferMech.Native:
                                default:     // always assume native
                                    rc = DoAudioNativeXfer(session);
                                    break;
                                }
                            }
                        }

                        if (rc != ReturnCode.Success && session.StopOnTransferError)
                        {
                            // end xfer without setting rc to exit (good/bad?)
                            session.DGControl.PendingXfers.Reset(pending);
                        }
                        else
                        {
                            rc = session.DGControl.PendingXfers.EndXfer(pending);
                        }
                    }
                    #endregion
                } while (rc == ReturnCode.Success && pending.Count != 0 && !session.CloseDSRequested);
            }
            else
            {
                HandleReturnCode(session, rc);
            }

            // some poorly written scanner drivers return failure on EndXfer so also check for pending count now.
            // this may break with other sources but we'll see
            if (//pending.Count == 0 &&
                session.State > 5)
            {
                session.ChangeState(5, true);
                session.DisableSource();
            }
        }