Ejemplo n.º 1
0
        public bool GetCap()
        {
            bool flag = true;

            if (capId == TwCap.ICAP_XRESOLUTION || capId == TwCap.ICAP_YRESOLUTION)
            {
                flag = SetInch();
            }
            //if (capId == TwCap.ICAP_THRESHOLD)
            //{
            //    flag = SetBitDepthReduction();
            //}
            if (flag)
            {
                if (capId == TwCap.ECAP_PAPERSOURCE)
                {
                    GetPaperSource();
                }
                else
                {
                    TwCapability cap = new TwCapability(capId);

                    if (twSession.GetCapability(ref cap))
                    {
                        IntPtr intPtr = cap.contentValuePtr;
                        switch (cap.contentType)
                        {
                        case TwOn.One:
                            GetCapFromOneValue(intPtr);
                            break;

                        case TwOn.Array:
                            GetCapFromArray(intPtr);
                            break;

                        case TwOn.Enum:
                            GetCapFromEnumeration(intPtr);
                            break;

                        case TwOn.Range:
                            GetCapFromRange(intPtr);
                            break;

                        default:
                        {
                            logger.Debug("the contentType in TwCapability is wrong");
                            flag = false;
                        }
                        break;
                        }
                    }
                    if (cap.contentValuePtr != null)
                    {
                        TwainSession.GlobalFree(cap.contentValuePtr);
                    }
                }
            }
            return(flag);
        }
        internal void Set(TwCapability cap)
        {
            try {
                switch (cap.ConType)
                {
                case TwOn.One:
                    var _genericValue = cap.GetValue();
                    var _oneValue     = _genericValue as TwOneValue;
                    if (_oneValue != null)
                    {
                        this.SetCore(TwTypeHelper.CastToCommon(_oneValue.ItemType, TwTypeHelper.ValueToTw <uint>(_oneValue.ItemType, _oneValue.Item)));
                    }
                    else
                    {
                        this.SetCore(_genericValue.ToString());
                    }
                    break;

                case TwOn.Range:
                    for (var _range = cap.GetValue() as TwRange; _range != null; _range = null)
                    {
                        this.SetCore(
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.MinValue)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.MaxValue)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.StepSize)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.DefaultValue)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.CurrentValue)));
                    }
                    break;

                case TwOn.Array:
                    for (var _array = cap.GetValue() as __ITwArray; _array != null; _array = null)
                    {
                        this.SetCore(_array.Items);
                    }
                    break;

                case TwOn.Enum:
                    for (var _enum = cap.GetValue() as __ITwEnumeration; _enum != null; _enum = null)
                    {
                        this.SetCore(_enum.Items, _enum.DefaultIndex, _enum.CurrentIndex);
                    }
                    break;

                default:
                    throw new DataSourceException(TwRC.Failure, TwCC.BadValue);
                }
            } catch (Exception ex) {
                throw new DataSourceException(TwRC.Failure, TwCC.BadValue, ex.Message);
            }
        }
        private TwRC SetCapability()
        {
            TwCapability cap = new TwCapability(TwCap.XferCount, 1, TwType.Int16);
            TwRC         rc  = tw.DsCapability(appId, sources[CurrentScanner], TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);

            if (rc != TwRC.Success)
            {
                CloseDS();
                throw new Exception(GetTwainStatus());
            }
            else
            {
                twainState |= TwainStateFlag.DSReady;
            }
            return(rc);
        }
 public bool GetDataSourceAvailableCapabilityValues(TwIdentity dataSourceId, TwCapability result)
 {
   TwRC rc = LibTwain32.DScap(fApplicationId, dataSourceId, TwDG.Control, TwDAT.Capability, TwMSG.Get, result);
   return (bool)(rc == TwRC.Success);
 }
      public object GetDataSourceCapability(TwIdentity dataSourceId, TwCap capType)
      {
        object result = null;
        TwCapability cap = new TwCapability(capType);

        if(GetDataSourceCapability(dataSourceId, cap))
        {
          result = cap.GetCurrentValue();
        }
        return result;
      }
 public bool SetDataSourceCapability(TwIdentity dataSourceId, TwCap capType, TwType valueType, object value)
 {
   TwCapability cap = new TwCapability(capType, valueType, value);
   return SetDataSourceCapability(dataSourceId, cap);
 }
 public bool SetDataSourceCapability(TwIdentity dataSourceId, TwCapability cap)
 {
   TwRC rc = LibTwain32.DScap(fApplicationId, dataSourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);
   return (bool)(rc == TwRC.Success);
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Устанавливает значение для указанного <see cref="TwCap">capability</see>
        /// </summary>
        /// <param name="capability">Значение перечисления <see cref="TwCap"/>.</param>
        /// <param name="capabilityValue">Устанавливаемое значение.</param>
        /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
        public void SetCap(TwCap capability,Enumeration capabilityValue) {
            if((this._TwainState&StateFlag.DSOpen)!=0) {
                using(TwCapability _cap=new TwCapability(
                    capability,
                    new _TwEnumeration() {
                        ItemType=Twain32._Convert(capabilityValue.Items[0].GetType()),
                        NumItems=capabilityValue.Count,
                        CurrentIndex=capabilityValue.CurrentIndex,
                        DefaultIndex=capabilityValue.DefaultIndex
                    },
                    capabilityValue.Items)) {

                    TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.Set,_cap);
                    if(_rc!=TwRC.Success) {
                        throw new TwainException(this._GetStatus());
                    }
                }
            } else {
                throw new TwainException("Источник данных не открыт.");
            }
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Устанавливает значение для указанного <see cref="TwCap">capability</see>
 /// </summary>
 /// <param name="capability">Значение перечисления <see cref="TwCap"/>.</param>
 /// <param name="capabilityValue">Устанавливаемое значение.</param>
 /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
 public void SetCap(TwCap capability,Range capabilityValue) {
     if((this._TwainState&StateFlag.DSOpen)!=0) {
         using(TwCapability _cap=new TwCapability(capability,capabilityValue.ToTwRange())) {
             TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.Set,_cap);
             if(_rc!=TwRC.Success) {
                 throw new TwainException(this._GetStatus());
             }
         }
     } else {
         throw new TwainException("Источник данных не открыт.");
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Устанавливает значение для указанного <see cref="TwCap">capability</see>
        /// </summary>
        /// <param name="capability">Значение перечисления <see cref="TwCap"/>.</param>
        /// <param name="capabilityValue">Устанавливаемое значение.</param>
        /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
        public void SetCap(TwCap capability,object[] capabilityValue) {
            if((this._TwainState&StateFlag.DSOpen)!=0) {
                using(TwCapability _cap=new TwCapability(
                    capability,
                    new _TwArray() {
                        ItemType=Twain32._Convert(capabilityValue[0].GetType()), NumItems=capabilityValue.Length
                    },
                    capabilityValue)) {

                    TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.Set,_cap);
                    if(_rc!=TwRC.Success) {
                        throw new TwainException(this._GetStatus());
                    }
                }
            } else {
                throw new TwainException("Источник данных не открыт.");
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Возвращает значение для указанного capability (возможность).
 /// </summary>
 /// <param name="capability">Значение перечисления TwCap.</param>
 /// <returns>В зависимости от значение capability, могут быть возвращены: тип-значение, массив, <see cref="Twain32.Range">диапазон</see>, <see cref="Twain32.Enumeration">перечисление</see>.</returns>
 /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
 public object GetCap(TwCap capability) {
     if((this._TwainState&StateFlag.DSOpen)!=0) {
         using(TwCapability _cap=new TwCapability(capability)) {
             TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.Get,_cap);
             if(_rc==TwRC.Success) {
                 switch(_cap.ConType) {
                     case TwOn.One:
                         _TwOneValue _one_val=(_TwOneValue)_cap.GetValue();
                         return Twain32._Convert(_one_val.Item,_one_val.ItemType);
                     case TwOn.Range:
                         return Range.CreateRange((_TwRange)_cap.GetValue());
                     case TwOn.Array:
                     case TwOn.Enum:
                         object _val=_cap.GetValue();
                         TwType _item_type=(TwType)_val.GetType().GetProperty("ItemType").GetValue(_val,null);
                         object[] _result_array=new object[(int)_val.GetType().GetProperty("NumItems").GetValue(_val,null)];
                         object _items=_val.GetType().GetProperty("ItemList").GetValue(_val,null);
                         MethodInfo _items_getter=_items.GetType().GetMethod("GetValue",new Type[]{typeof(int)});
                         for(int i=0;i<_result_array.Length;i++) {
                             _result_array[i]=Twain32._Convert(_items_getter.Invoke(_items,new object[] { i }),_item_type);
                         }
                         if(_cap.ConType==TwOn.Array) {
                             return _result_array;
                         } else {
                             return Enumeration.CreateEnumeration(
                                 _result_array,
                                 (int)_val.GetType().GetProperty("CurrentIndex").GetValue(_val,null),
                                 (int)_val.GetType().GetProperty("DefaultIndex").GetValue(_val,null));
                         }
                         
                 }
                 return _cap.GetValue();
             } else {
                 throw new TwainException(this._GetStatus());
             }
         }
     } else {
         throw new TwainException("Источник данных не открыт.");
     }
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Возвращает флаги, указывающие на поддерживаемые источником данных операции, для указанного значения capability.
 /// </summary>
 /// <param name="capability">Значение перечисдения TwCap.</param>
 /// <returns>Набор флагов.</returns>
 /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
 public TwQC IsCapSupported(TwCap capability) {
     if((this._TwainState&StateFlag.DSOpen)!=0) {
         using(TwCapability _cap=new TwCapability(capability)) {
             TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.QuerySupport,_cap);
             if(_rc==TwRC.Success) {
                 return (TwQC)((_TwOneValue)_cap.GetValue()).Item;
             } else {
                 return 0;
             }
         }
     } else {
         throw new TwainException("Источник данных не открыт.");
     }
 }
Ejemplo n.º 13
0
 public TwRC DsCapability([In, Out] TwIdentity origin, [In] TwIdentity dest, TwDG dg, TwDAT dat, TwMSG msg, [In, Out] TwCapability twcapability)
 {
     return(DsEntryCapability(origin, dest, dg, dat, msg, twcapability));
 }
Ejemplo n.º 14
0
 internal static extern TwRC DsEntryCapability([In, Out] TwIdentity origin, [In] TwIdentity dest, TwDG dg, TwDAT dat, TwMSG msg, [In, Out] TwCapability twcapability);
      public TwainCapability(TwainDevice twain, TwIdentity dataSourceId, TwCap capType)
      {
        fTwain = twain;
        fDataSourceId = dataSourceId;
        fCapType = capType;
        fValueType = TwType.DontCare16;

        TwCapability cap = new TwCapability(capType);

        if(fTwain.GetDataSourceAvailableCapabilityValues(dataSourceId, cap))
        {
          fValueType = cap.GetValueType();

          Items = new List<object>();

          int numItems = cap.GetNumItems();

          for(int i = 0; i < numItems; i++)
          {
            Items.Add(cap.GetItem(i));
          }

          MinValue = cap.GetMinValue();
          MaxValue = cap.GetMaxValue();
          StepSize = cap.GetStepSize();
          fCurrentValue = cap.GetCurrentValue();
        }
      }