Code: Select all
private bool Scan()
{
bool ret = false;
string lastStatus = "None";
try
{
if (File.Exists(@"C:\Scan.tif"))
File.Delete(@"C:\Scan.tif");
_sessionCount = 0;
_imageCount = 0;
// open the device manager
_deviceManager.Open();
// if no devices are found in the system
if (_deviceManager.Devices.Count == 0)
{
MessageBox.Show("No devices found.");
return ret;
}
// get reference to current device
_device = _deviceManager.Devices.Current;
// subscribe to the device events
SubscribeToDeviceEvents();
// set scanning settings
_device.ShowUI = false;
_device.Open();
//_device.PixelType = PixelType.BW;
_device.UnitOfMeasure = UnitOfMeasure.Inches;
_device.DisableAfterAcquire = true;
_device.TransferMode = TransferMode.Memory;
_device.AcquiredImages.AutoClean = true;
// get reference to object that manipulates DuplexEnabled capability
DeviceCapability duplexEnabledCap = _deviceManager.Devices.Current.Capabilities.Find(DeviceCapabilityId.DuplexEnabled);
// if DuplexEnabled capability supported
if (duplexEnabledCap != null)
{
// set value of DuplexEnabled capability
duplexEnabledCap.SetValue(checkBox1.Checked);
}
string tiffFilename = @"C:\scan.tif";
// acquire images from device
AcquireModalState acquireModalState = AcquireModalState.None;
AcquiredImage acquiredImage = null;
do
{
acquireModalState = _device.AcquireModal();
switch (acquireModalState)
{
case AcquireModalState.ImageAcquired:
lastStatus = "ImageAcquired";
acquiredImage = _device.AcquiredImages.Last;
// despeckle/deskew/detect border
acquiredImage.Despeckle(8, 25, 30, 400);
acquiredImage.Deskew(BorderColor.AutoDetect, 5, 5);
acquiredImage.DetectBorder(5);
// add image to multipage TIFF file if image is not blank
if (!acquiredImage.IsBlank(0.02f))
acquiredImage.Save(tiffFilename);
ret = true;
break;
case AcquireModalState.ScanCompleted:
lastStatus = "ScanCompleted";
ret = true;
//Copy Images
//Clear images
_device.AcquiredImages.Clear();
// close the device
_device.Close();
// close the device manager
_deviceManager.Close();
break;
case AcquireModalState.ScanCanceled:
case AcquireModalState.ScanFailed:
lastStatus = "ScanFailed";
ret = false;
//Copy Images
//Clear images
_device.AcquiredImages.Clear();
// close the device
_device.Close();
// close the device manager
_deviceManager.Close();
break;
}
}
while (acquireModalState != AcquireModalState.None);
UnsubscribeFromDeviceEvents();
if (acquiredImage != null)
acquiredImage.Dispose();
}
catch (TwainException ex)
{
MessageBox.Show(ex.Message , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); //ERROR Comes here
}
return ret;
}