public bool Acquire(DataSourceSettings settings)
      {
        bool success = false;

        if(this.Open())
        {
          fSettings = settings;

          if(fSettings != null)
          {
            // Setup Pixel Type
            TwCapPixelType pixelType;

            switch(fSettings.ColorMode)
            {
              case ColorModeEnum.BW: pixelType = TwCapPixelType.BW; break;
              case ColorModeEnum.RGB: pixelType = TwCapPixelType.RGB; break;
              case ColorModeEnum.Gray: pixelType = TwCapPixelType.Gray; break;
              default: pixelType = TwCapPixelType.BW; break;
            }

            fCapabilityPixelType.CurrentValue = pixelType;

#if USE_PAGE_TYPE
            // Page Type Setting is not used anymore; Image Layout is defined instead
            TwCapPageType pageType;

            switch(fSettings.PageType)
            {
              case PageTypeEnum.Letter: pageType = TwCapPageType.UsLetter; break;
              case PageTypeEnum.Legal: pageType = TwCapPageType.UsLegal; break;
              default: pageType = TwCapPageType.UsLetter; break;
            }

            fCapabilityPageSize.CurrentValue = pageType;
#else
            // Setup Scan Area
            TwImageLayout ilayout = new TwImageLayout();

            if(fTwain.GetImageLayout(fIdent, ilayout))
            {
              BoundsInches scanArea = settings.ScanArea;

              ilayout.Frame.Left = (float)scanArea.X;
              ilayout.Frame.Top = (float)scanArea.Y;
              ilayout.Frame.Right = (float)(scanArea.X + scanArea.Width);
              ilayout.Frame.Bottom = (float)(scanArea.Y + scanArea.Height);
              fTwain.SetImageLayout(fIdent, ilayout);
            }
#endif

            // Setup Resolution
            float resolution = (float)fSettings.Resolution;

            fCapabilityResolutionX.CurrentValue = resolution;
            fCapabilityResolutionY.CurrentValue = resolution;

            // Enable/Disable Document Feeder
            if(fSettings.EnableFeeder)
            {
              fCapabilityFeederEnabled.CurrentValue = fCapabilityFeederLoaded.CurrentValue;
            }
            else
            {
              fCapabilityFeederEnabled.CurrentValue = false;
            }

            // Analog adjustments
            fCapabilityThreshold.ScaledValue = settings.Threshold;
            fCapabilityBrightness.ScaledValue = settings.Brightness;
            fCapabilityContrast.ScaledValue = settings.Contrast;
          }

          Application.AddMessageFilter(this);
          fState = StateType.Active; // This makes IsActive = true

          if(fTwain.StartDataSession(fIdent, settings.ShowSettingsUI, settings.ShowTransferUI))
          {
            success = true;
          }
          else
          {
            Stop(); // TODO: Is this OK?
          }
        }

        return success;
      }
 public TwImageLayout GetImageLayout(TwIdentity dataSourceId)
 {
   TwImageLayout result = new TwImageLayout();
   TwRC rc = LibTwain32.DSilayout(fApplicationId, dataSourceId, TwDG.Image, TwDAT.ImageLayout, TwMSG.Get, result);
   return (rc == TwRC.Success) ? result : null;
 }
 public bool GetImageLayout(TwIdentity dataSourceId, TwImageLayout result)
 {
   TwRC rc = LibTwain32.DSilayout(fApplicationId, dataSourceId, TwDG.Image, TwDAT.ImageLayout, TwMSG.Get, result);
   return (bool)(rc == TwRC.Success);
 }