Unable to Scan using WIA on Windows 7 x64

1.1k views Asked by At

Error msg:

Could not load file or assembly 'Interop.WIA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

The solution is working fine on Windows XP with normal usb scanner, however while tried to scan with Network Scanner (Discovered using Scangear tool) on Windows 7 (x64) above is encountered.

C# Code:

 private void startscan()
        {

            try
            {

                CommonDialogClass dailog = new CommonDialogClass();
                ImageFile imgfile = (ImageFile)dailog.ShowAcquireImage(WiaDeviceType.ScannerDeviceType, WiaImageIntent.UnspecifiedIntent, WiaImageBias.MaximizeQuality,
                FormatID.wiaFormatJPEG, true, true, false);
                string firstname = DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
                string name = scantxtfname.Text.Trim() + ".jpeg";


                string filenamepath = ConfigurationManager.ConnectionStrings["scanfilepath"].ConnectionString.ToString() + firstname + name;

                scanfile.Add(name);
                firstint.Add(Convert.ToInt32(firstname));
                SaveImageToPNGFile(imgfile, filenamepath);



                FileStream stream = new FileStream(filenamepath, FileMode.Open, FileAccess.Read);

                stream.Close();

                DataTable dt = new DataTable();

                dt.Columns.Add("Scaned Files", typeof(string));

                datagridscanedfiles.DataSource = null;

                for (int i = 0; i < scanfile.Count; i++)
                {
                    DataRow r = dt.NewRow();
                    r[0] = scanfile[i].ToString();
                    dt.Rows.Add(r);
                }
                datagridscanedfiles.DataSource = dt;
                datagridscanedfiles.Visible = true;
                int ln = scanfile.Count;

                pictureBox1.ImageLocation = filenamepath;

            }
            catch ( Exception d)
            {

                MessageBox.Show(d.Message);
            }


        }


 private static void SaveImageToPNGFile(ImageFile image, string fileName)
        {
            try
            {
                ImageProcess imgProcess = new ImageProcess();
                object convertFilter = "Convert";
                string convertFilterID = imgProcess.FilterInfos.get_Item(ref convertFilter).FilterID;
                imgProcess.Filters.Add(convertFilterID, 0);
                SetWIAProperty(imgProcess.Filters[imgProcess.Filters.Count].Properties, "FormatID", WIA.FormatID.wiaFormatJPEG);
                image = imgProcess.Apply(image);
                image.SaveFile(fileName);
            }
            catch (Exception er)
            {

                MessageBox.Show(er.Message);
            }

        }

  private static void SetWIAProperty(IProperties properties, object propName, object propValue)
        {
            Property prop = properties.get_Item(ref propName);

            prop.set_Value(ref propValue);
        }

Please suggest how I can resolve above Issue?

2

There are 2 answers

0
G-Man On

Make sure that you are not building your project as 'Any CPU'. It needs to be x86. The WIA COM component cannot run in 64 bit mode.

0
Scott Yang On

I ever met this problem, and even more the project can't be compiled successfully in X64 platform. since the WIA COM component can't be invoked in x64 mode, finally I just turned to another way: complete your WIA code in a single app, then use another Process to invoke this scanning app from your main app. I think this isn't the best solution, but at least it works well, haha.