Question

I have been tasked with integrating image acquisition into a .NET application and I have been looking for an API to use for performing this function. I have come across several "standard" APIs, some have been in existence for a long time, some not so long. I have looked at references to ISIS, TWAIN, WIA, and SANE (said to be mostly *nix). They all appear to be Win32 libraries except for SANE, and I was wondering what the current recommendations are for talking to image acquisition devices (scanners)?

Feel free to recommend something else if you feel it is better. I'm looking for open source options.

Edit: I put open source, when what I actually meant was free. using WIA or TWAIN is fine since they are free even though they are proprietary interfaces.

Was it helpful?

Solution

If you are limiting choice to open source, you are limiting yourself to SANE. I doubt there is any other open source library that is close to SANE in terms of device support and compatibility. That said one must mention that SANE is still quite poor in device support compared to proprietary APIs like TWAIN and WIA...

If open source is not a must have - then the choice depends on the operating system. WIA would be the best solution for Windows XP and newer, TWAIN might be better if you need to support Windows 2000 or 9x (I think TWAIN is also supposed to be cross-platform, even though I don't have any evidence to that right now). Compared to WIA, TWAIN API is horribly outdated though (IMHO), and WIA has stricter requirements on supporting things like batch scanning (which TWAIN leaves to the device manufacturer to support or not).

OTHER TIPS

If your application is using high end scanners and you need to write an app that will maximize your scanners' throughput and take advantage all the advanced features of these scanners, you'll want to take a look at an ISIS based API. I personally have used Captiva's/EMC's PixTools SDK with great success to build an application for a large volume scanning house. The toolkit made it fairly easy to clean up scanned images on the fly using various image processing filters and software. I was also able to easily integrate barcode and patchcode recognition. The toolkit is pricey - about $6k four years ago.

But I suspect your application doesn't require a high end solution. In this case I think you should look at TWAIN. I've never tried it myself, but I understand TWAIN is difficult to work with. A while ago I found an article on CodeProject where the author presents a .NET wrapper for TWAIN:

.NET TWAIN image scanner

I played with it a bit and it seemed to work. Here on SO I found a thread where Luke Quinane refers reader to his Google Code project based on this same article. Here's the link:

Twain Dot Net

I would suggest you to go with TWAIN drivers in most cases, as it provides the maximum compatibility with scanners and also the freedom to customize the scanning based on the scanner model. If you are building a simple scanning application, WIA might be suitable as well. For ISIS, unless you have a specific requirement, you’d better check other options first. SANE provides optimal support across network scanning and on systems were there is no Windows system.

If you can live wiþ Sane’s device ſupport, by all means go wiþ it, as it is ſaner, free (open), flexible. Oðers will always impoſe arbitrary limitations.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top