views:

9851

answers:

6

I want to implement a paperless filing system and was looking to use WIA with C# for the image acquisition. There are quite a few sample projects on CodeProject, etc. However, after downloading every one of them that I can find, I have run into a problem.

In each and every one of them, the reference to WIALib is broken. When I go to add "Microsoft Windows Image Acquisition" as a reference, the only version available on my development workstation (also the machine that will run this) is 2.0.

Unfortunately, every one of these sample projects appear to have been coded against 1.x. The reference goes in as "WIA" instead of "WIALib". I took a shot, just changing the namespace import, but clearly the API is drastically different.

Is there any information on either implementing v2.0 or on upgrading one of these existing sample projects out there?

A: 

Quick question. Do you absolutely need WIA? Or can you get by with Twain?

If Twain is OK I might have some code to donate.

Shawn Miller
A: 

It doesn't need to be WIA. I was mostly looking at the WIA setup because it offers the same basic interface for different scanners. I've got 3 scanners on this machine and the TWAIN drivers/software for all of them suck (like blocking the screen during scanning).

For document management, I'm really looking for simple 200dpi grayscale scans, so most of the stuff in the TWAIN drivers is overkill.

That said, asking here was part of my last attempt to figure out how to do it in WIA before moving on to TWAIN.

J Wynia
+8  A: 

To access WIA, you'll need to add a reference to the COM library, "Microsoft Windows Image Acquisition Library v2.0" (wiaaut.dll). add a "using WIA;"

const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
CommonDialogClass wiaDiag = new CommonDialogClass();
WIA.ImageFile wiaImage = null;

wiaImage = wiaDiag.ShowAcquireImage(
        WiaDeviceType.UnspecifiedDeviceType, 
        WiaImageIntent.GrayscaleIntent, 
        WiaImageBias.MaximizeQuality, 
        wiaFormatJPEG, true, true, false);

WIA.Vector vector = wiaImage.FileData;

(System.Drawing)

Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
i.Save(filename)

Thats a basic way, works with my flatbed/doc feeder. If you need more than one document/page at a time though, there is probably a better way to do it (from what I could see, this only handles one image at a time, although I'm not entirely sure). While it is a WIA v1 doc, Scott Hanselman's Coding4Fun article on WIA does contain some more info on how to do it for multiple pages, I think (I'm yet to go further than that myself)

If its for a paperless office system, you might want also check out MODI (Office Document Imaging) to do all the OCR for you.

aeoth
I'll give this a shot. I"m not messing with OCR because I haven't seen any of the systems get anywhere close enough on my stuff to be more useful than just doing some decent metadata and tagging.This should give me most of what I need as once it's referenced, I can dig through the API.
J Wynia
Instead of that magic GUID you can use System.Drawing.Imaging.ImageFormat.Jpeg.Guid.ToString("B").
Lars
Or you can use the guid defined in Interop.WIA.dll. FormatID.wiaFormatJPEG
Greg Dean
A: 

http://dotnet.org.za/colin/archive/2005/03/15/15478.aspx http://dotnet.org.za/colin/archive/2005/03/15/15483.aspx

Links to sample code of the WIA 2.0 . You will never find perfect examples of how to do everything. Trust me I googled for days and this is the best that I could come up with. Use the supplied links above, and read the WIA API on the MSDN for the parts you don't understand. That is about the best advice I can give you.

A: 

Another note: You have to download the WIA 2.0 dll from Microsoft.com and then browse to the dll and add it to your project.

A: 

Heres how to target WIA 1.0 also so you can ship your app to Windows Xp. Something I was desperately looking for!! http://stackoverflow.com/questions/678844/how-to-develop-using-wia-1-under-vista

giddy