views:

434

answers:

2

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.

+2  A: 

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).

Alex T.
Oh, and considering that you want .NET API - image acquisition APIs are all in native code, you will definitely need a managed wrapper.
Alex T.
You should consider Open CV. It is a very complete toolkit, probably overkill for your current needs, but it is fabulous. [Emgu][1] is a .NET wrapper around it. [1]: http://www.emgu.com/wiki/index.php/Main_Page
Mikos
As far as I can see Open CV is not an image acquisition/capture API...
Alex T.
I thought that too from initial look, it appears to be computer vision, but that may very probably include image capture in it somewhere.
David
+1  A: 

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

Jay Riggs