스캐너 장치의 원격 제어를위한 .Net 4.0 응용 프로그램을 빌드 중입니다. 나는 TWAIN과 WIA 라이브러리를 모두 시험해 보았지만 같은 문제가있다. 이미지 스캔 스캐너 선택 및 스캔 설정 대화 상자 제외. C#에서 대화 상자가없는 스캐너 사용
난 WIA scripting in .Net에 유용한 문서를 발견하고,이 그것을 변형 :이private Image Scan(string deviceName)
{
WiaClass wiaManager = null; // WIA manager COM object
CollectionClass wiaDevs = null; // WIA devices collection COM object
ItemClass wiaRoot = null; // WIA root device COM object
CollectionClass wiaPics = null; // WIA collection COM object
ItemClass wiaItem = null; // WIA image COM object
try
{
// create COM instance of WIA manager
wiaManager = new WiaClass();
// call Wia.Devices to get all devices
wiaDevs = wiaManager.Devices as CollectionClass;
if ((wiaDevs == null) || (wiaDevs.Count == 0))
{
throw new Exception("No WIA devices found!");
}
object device = null;
foreach (IWiaDeviceInfo currentDevice in wiaManager.Devices)
{
if (currentDevice.Name == deviceName)
{
device = currentDevice;
break;
}
}
if (device == null)
{
throw new Exception
(
"Device with name \"" +
deviceName +
"\" could not be found."
);
}
// select device
wiaRoot = (ItemClass)wiaManager.Create(ref device);
// something went wrong
if (wiaRoot == null)
{
throw new Exception
(
"Could not initialize device \"" +
deviceName + "\"."
);
}
wiaPics = wiaRoot.GetItemsFromUI
(
WiaFlag.SingleImage,
WiaIntent.ImageTypeColor
) as CollectionClass;
if (wiaPics == null || wiaPics.Count == 0)
{
throw new Exception("Could not scan image.");
}
Image image = null;
// enumerate all the pictures the user selected
foreach (object wiaObj in wiaPics)
{
if (image == null)
{
wiaItem = (ItemClass)Marshal.CreateWrapperOfType
(
wiaObj, typeof(ItemClass)
);
// create temporary file for image
string tempFile = Path.GetTempFileName();
// transfer picture to our temporary file
wiaItem.Transfer(tempFile, false);
// create Image instance from file
image = Image.FromFile(tempFile);
}
// release enumerated COM object
Marshal.ReleaseComObject(wiaObj);
}
if (image == null)
{
throw new Exception("Error reading scanned image.");
}
return image;
}
finally
{
// release WIA image COM object
if (wiaItem != null)
Marshal.ReleaseComObject(wiaItem);
// release WIA collection COM object
if (wiaPics != null)
Marshal.ReleaseComObject(wiaPics);
// release WIA root device COM object
if (wiaRoot != null)
Marshal.ReleaseComObject(wiaRoot);
// release WIA devices collection COM object
if (wiaDevs != null)
Marshal.ReleaseComObject(wiaDevs);
// release WIA manager COM object
if (wiaManager != null)
Marshal.ReleaseComObject(wiaManager);
}
}
I 실제로 구성 (스캔 방식의 입력 파라미터)에서 장치를 선택하도록 관리하고 후에 얻어진 화상 검색 주사.
그러나 옵션 스캔 대화 상자의 문제 (DEVICENAME을 사용하여 스캔). 원격 제어 응용 프로그램이므로 대화 상자가 사용자에게 표시되지 않으므로 기본 설정을 사용하여 건너 뛰거나 필요한 경우 구성의 설정을 사용해야합니다.
검색 옵션 대화 상자 :
UI가 나타나지 않도록하려면 'GetItemsFromUI'를 호출하는 것이 문제의 근원 일 수 있다고 생각하십니까? –
그런데이 문제가 해결되면 _Microsoft Windows Image Acquisition 1.01 Type Library_하지만 다른 라이브러리도 환영합니다. –
@Damien_The_Unbeliever : LOL, 그게 문제가되어야하지만, 대안은 ... –