# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  کار با اسکنر

## omid195

سلام من مي خواهم تصويري را از اسکنر خوانده و در بانک ذخيره کنم 
اگر کسي کامپوننت کار با اسکنر در C#‎ را دارد لطفا کمک کند
ممنون

----------


## prankster

معروفترین dll که برای scanning وجود دارد و اکثر نرم افزار های scan از آن استفاده می کنند twain است:
http://www.twain.org/downloads.shtm

Developer Toolkit و specification را از آدرس بالا می توانید download کنید، از Interop برای استفاده از dll بالا در .net استفاده می کنید. مثال اینجا هست:

http://www.codeproject.com/KB/dotnet...x?target=twain

----------


## Happy_davood

من یک هفته پیش به سئوال شبیه به این جواب دادم و کد هم گذاشتم .
نیازی به کامپوننت های دیگه نیست .
اینم کد :


using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsControlLibrary
{
    public class ImageAcquisition
    {
        private WIALib.WiaClass WiaClass;
        private WIALib.ItemClass ItemClass;
        private WIALib.CollectionClass CollectionClassDevices;
        private WIALib.CollectionClass CollectionClassPics;

        private object selectUsingUI;

        #region SelectDevice
        public bool SelectDevice()
        {
            try
            {
                WiaClass = new WIALib.WiaClass();
                CollectionClassDevices = (WIALib.CollectionClass)WiaClass.Devices;

                if (WiaClass.Devices.Count == 0)
                    return false;

                selectUsingUI = System.Reflection.Missing.Value;

                ItemClass = (WIALib.ItemClass)WiaClass.Create(ref selectUsingUI);

                if (ItemClass == null)
                    return false;

                return true;
            }
            catch (System.Exception exp)
            {
                return false;
            }
            return false;
        }
        #endregion

        #region DeviceSetting
        public bool DeviceSetting()
        {
            try
            {
                CollectionClassPics = (WIALib.CollectionClass)ItemClass.GetItemsFromUI(W  IALib.WiaFlag.SingleImage, WIALib.WiaIntent.MaximizeQuality);
                if (CollectionClassPics == null)
                    return false;
            }
            catch (System.Exception exp)
            {
                return false;
            }
            return true;
        }
        #endregion

        #region Capture
        public System.Drawing.Image Capture()
        {
            try
            {
                if(CollectionClassPics[0] != null)
                {
                    System.Drawing.Image Image;
                    WIALib.ItemClass ItemClassCurrent = (WIALib.ItemClass)System.Runtime.InteropServices.M  arshal.CreateWrapperOfType(CollectionClassPics[0], typeof(WIALib.ItemClass));

                    string fileName = System.IO.Path.GetTempFileName();
                    ItemClassCurrent.Transfer(fileName, false);

                    Image = System.Drawing.Image.FromFile(fileName);

                    System.Runtime.InteropServices.Marshal.ReleaseComO  bject(CollectionClassPics[0]);

                    return Image;
                }

                return null;
            }
            catch (System.Exception exp)
            {
                return null;
            }
        }
        #endregion
    }
}

----------


## omid195

براي کار با دات نت به dottwain نياز است ايا کسي آن را با کرک دارد
ممنون

----------


## مهدی رحیم زاده

> براي کار با دات نت به dottwain نياز است ايا کسي آن را با کرک دارد
> ممنون


کدی که دوستمون بالا گزاشته کاملا جواب میده . من خودم تست کردم . پیشنهاد می کنم حدالامکان از کرک و این چیزا استفاده نکن 
چون بعد ها دچار اشکال میشی .
موفق باشید.

----------


## omid195

private WIALib.WiaClass WiaClass;
private WIALib.ItemClass ItemClass;
private WIALib.CollectionClass CollectionClassDevices;
private WIALib.CollectionClass CollectionClassPics;
اين WIALIB از چه Reference ي است آيا مال خود fcl  است

----------


## Happy_davood

شما Add Refrence کنید . به نظرم تو قسمت COM باشه :


Microsoft Windows Image Acquisition 1.01 Type Library

----------


## omid195

خيلي ممنون از شما. :قلب: 
يه سوال ديگه 
آيا شبيه سازي براي اسکنر است که کار آن را انجام دهد آخه من الان دسترسي به اسکنر ندارم :ناراحت: 
اگه کمک کنيد ممنون مي شم :قلب:

----------


## h_r_sh

> من یک هفته پیش به سئوال شبیه به این جواب دادم و کد هم گذاشتم .
> نیازی به کامپوننت های دیگه نیست .
> اینم کد :
> 
> 
> using System;
> using System.Collections.Generic;
> using System.Text;
> 
> ...



چطور مي شه از اين كد استفاده كرد؟
چطور ميشه برنامه به طور خودكار اسكن شدن توسط اسكنر رو تشخيص بده و عكس اسكن شده رو مثلا توي يه pictureBox قرار بده؟

----------


## niloo17

سلام
کسی می دونه چه جوری می تونم از این کلاس استفاده کنم؟؟؟؟؟

----------


## Happy_davood

خوب مثل اینکه یه ایرادی تو این کلاس که گذاشتم بوده و درست کار نمیکرده . من یه نمونه اصلاح شده می زارم که الان هم خودم ازش استفاده می کنم  کاملاً جواب میده :

    public class ImageAcquisition
    {
        private WIALib.WiaClass WiaClass;
        private WIALib.ItemClass ItemClass;
        private WIALib.CollectionClass CollectionClassDevices;
        private WIALib.CollectionClass CollectionClassPics;
        

        #region SelectDevice
        public bool SelectDevice()
        {
            try
            {
                object selectUsingUI;

                WiaClass = new WIALib.WiaClass();
                CollectionClassDevices = (WIALib.CollectionClass)WiaClass.Devices;

                if (WiaClass.Devices.Count == 0)
                    return false;

                selectUsingUI = System.Reflection.Missing.Value;

                ItemClass = (WIALib.ItemClass)WiaClass.Create(ref selectUsingUI);

                if (ItemClass == null)
                    return false;

                return true;
            }
            catch (System.Exception exp)
            {
                return false;
            }
        }
        #endregion        

        #region Capture
        public System.Drawing.Image Capture()
        {
            try
            {
                CollectionClassPics = ItemClass.GetItemsFromUI(WIALib.WiaFlag.SingleImag  e, WIALib.WiaIntent.ImageTypeColor) as WIALib.CollectionClass;
                if (CollectionClassPics == null)
                    return null;

                ItemClass = (WIALib.ItemClass)System.Runtime.InteropServices.M  arshal.CreateWrapperOfType(CollectionClassPics[0], typeof(WIALib.ItemClass));
                string imageFileName = System.IO.Path.GetTempFileName();
                ItemClass.Transfer(imageFileName, false);
                System.Drawing.Image Image = System.Drawing.Image.FromFile(imageFileName);

                System.Runtime.InteropServices.Marshal.ReleaseComO  bject(CollectionClassPics[0]);
                return Image;
            }
            catch (System.Exception exp)
            {
                return null;
            }
        }
        #endregion
    }


این هم رش استفاده :

ImageAcquisition ImageAcquisition = new ImageAcquisition();
ImageAcquisition.SelectDevice();
this.pictureBox.Image = ImageAcquisition.Capture();

----------


## niloo17

سلام
من از این کلاس استفاده کرد م ولی اسکنر منو تشخیص نداد

----------


## debugger

براي اينكه اين name Space را بشناسه چه چيزي را بايد به refrence اضافه كنم ؟؟؟؟

اين ارور را ميده 

The type or namespace name 'WIALib' could not be found (are you missing a using directive or an assembly reference?

----------


## Happy_davood

این هم Refrence :
Microsoft Windows Image Acquisition 1.01 Type Library

----------


## Happy_davood

> سلام
> من از این کلاس استفاده کرد م ولی اسکنر منو تشخیص نداد


من رو دو تا اسکنر تست کردم Genius و پرینتر چهار کاره Canon که اسکنر هم داره .

نمی دونم آیا به غیر از WIA استاندارد های دیگه ای هم وجود داره یا نه . چون هر دوی این ها از WIA  استفاده می کنند . حتی تو MyComputer هم روی آیکن اسکنر نوشته Wia ....
wia =  Windows Image Acquisition

----------


## crazy_1892

سلام دوست عزيز ميشه يكم بيشتر توضيح بدي با اينكه اگه برات مقدرو يك مثال برام بذاري؟

----------


## niloo17

سلام 
من از gdtwain استفاده کردم اکثر اسکنر ها را تشخیص می ده کار هم باهاش خیلی راحته 
پیشنهاد می کنم از همین استفاده کنی

----------


## morteza_1234m

ImageAcquisition ImageAcquisition = new ImageAcquisition();
ImageAcquisition.SelectDevice();
this.pictureBox.Image = ImageAcquisition.Capture();سلام من هر چی تو toolbox می گردم picturebox رو پیدا نمی کنم
از کجا باید بیارمش؟؟؟
در ضمن من چه جوری می تونم اندازه عکس اسکن شده رو به 200*200 تغییر بدم؟؟

----------


## gh_k_1980

> خوب مثل اینکه یه ایرادی تو این کلاس که گذاشتم بوده و درست کار نمیکرده . من یه نمونه اصلاح شده می زارم که الان هم خودم ازش استفاده می کنم  کاملاً جواب میده :
> 
>     public class ImageAcquisition
>     {
>         private WIALib.WiaClass WiaClass;
>         private WIALib.ItemClass ItemClass;
>         private WIALib.CollectionClass CollectionClassDevices;
>         private WIALib.CollectionClass CollectionClassPics;
>         
> ...



با سلام 
اگه این سورس رو برای vb.net داری ممنون میشم بزاری

----------


## morteza_1234m

سلام دوستان من می خوام این کار رو با وب اپلیکیشن انجام بدم تقریبا هم انجام شده ولی وقتی اجرا می کنم اسکنر شروع به کار می کنه ولی چیزی نشون نمیده اینم کدم
 System.Windows.Forms.PictureBox pic = new System.Windows.Forms.PictureBox();
        ImageAcquisition img = new ImageAcquisition();
        img.SelectDevice();
   pic.Image = img.Capture();

----------


## corona

سلام دوستان.
Microsoft Windows Image Acquisition 1.01 Type Library  توی ویندوز 7 همچین dll ای وجود نداره. برای استفاده و کار با اسکنر توی 7 چه کارباید بکنم ؟ممنون.

----------


## programer1389

فایلش اینه نمیدونم ممکنه رو ویندوز شما جواب نده  :متفکر:

----------


## corona

ممنو ن از جوابت دوست عزیز. ولی مشکلی که هست اینه که وقتی می خوام این dll که دادی رو توی Refrences اضافه کنم خطا میده و نمیزاره Add بشه خطاشم اینه :
this is not a valid assembly or com component.

----------


## Mainar

> خوب مثل اینکه یه ایرادی تو این کلاس که گذاشتم بوده و درست کار نمیکرده . من یه نمونه اصلاح شده می زارم که الان هم خودم ازش استفاده می کنم کاملاً جواب میده :
> 
>     public class ImageAcquisition
>     {
>         private WIALib.WiaClass WiaClass;
>         private WIALib.ItemClass ItemClass;
>         private WIALib.CollectionClass CollectionClassDevices;
>         private WIALib.CollectionClass CollectionClassPics;
>  
> ...


سلام
من وقتي دكمه ي اجراي كد

ImageAcquisition ImageAcquisition = new ImageAcquisition();
ImageAcquisition.SelectDevice();
this.pictureBox.Image = ImageAcquisition.Capture();

رو ميزنم هيچ اتفاقي نميفته! :ناراحت:  نميدونم چرا!!!!!!! :متفکر:  :ناراحت:

----------


## salehvasaleh

از دوستان کسی نمی تونه فایلی که حاوی این کد هست بزاره تا ببنم چطویر باید اجرا بشه؟ممنون

----------


## khormaloo

ميشه بيشتر توضيح بدين

----------


## ایمان مدائنی

دوستان اگه پروژه شما كامل شد بزاريد تا ماهم استفاده كنيم !  :کف کرده!:

----------


## m.shahriari

سلام به همه دوستان.
من دارم با ویندوز ویستا کار می کنم و اصلا فضای نام WIALib را نمیشناسه.به جای اون فضای نام WIA را داریم که با اضافه به پروژه و تغییر قطعه کد فوق با WIA خیلی از آبجکت ها را نمیشناسه.من یه قطعه کد پیدا کردم به صورت زیر 
WIA.CommonDialog dlg = new WIA.CommonDialog();
        Device dvc = dlg.ShowSelectDevice(WiaDeviceType.ScannerDeviceTy  pe, true, false);
        if (dvc != null)
           {
               dlg.ShowAcquisitionWizard(dvc);
           }ولی با اجرای برنامه با خطای زیر مواجه میشم ، 
Exception from HRESULT: 0x80210015

ممنون میشم اگه دوستان برای حل این خطا راهنمایی کنن :تشویق:

----------


## homeshahab

با سلام خدمت اساتید
من یه جا خوندم برای استفاده از اسکنر باید dll ، مربوط به wia یعنی wiaaut.dll رو دانلود و  رجیستر کنی. این کار رو کردم و برنامه رو اجرا کردم و خطایی که دوستمون بالا اشاره کرد یعنی Exception from HRESULT: 0x80210015 رو داد جستجو کردم فهمیدم اسکنرم با این روش سازگاری نداره
مدل اسکنرم canon lide60 هست. 
از روش این تاپیک هم استفاده کردم وقتی فراخونی می کنم هیچ اتفاقی نمیفته دیگه خطا هم نمیده dll  
Microsoft Windows Image Acquisition 1.01 Type Library رو از روشی که گفته شده بود که داخل خود visual s. اوردم.
 :متفکر:

----------


## mahziar

سلام خدمت دوستان عزیز :

من این کد رو تو یه سمپل برای دوستان آماده کردم ، با اسکنر Genius خودم هم بدون مشکل کار میکنه امیدوارم مشکل هاتون رو حل کنه .

----------


## csharpprogramer88

> سلام خدمت دوستان عزیز :
> 
> من این کد رو تو یه سمپل برای دوستان آماده کردم ، با اسکنر Genius خودم هم بدون مشکل کار میکنه امیدوارم مشکل هاتون رو حل کنه .


دوست عزيزاين سمپل در ويندوز xp و در همه مدل اسكنري جواب ميده يا نه  در win7 چطور ؟
مثلا چاپگر 4 كاره اچ پي كه اسكن هم داره اين كد ها جواب ميده .
يه سوال ديگه ، اسكنر مجازي هم وجود داره ؟ آخه خودم  اسكنر ندارم و مشتري اسكنر خودشو به من نميده
يك برگه a4 را اسكن ميكنيم آيا ميشه يك قطعه كوچك از وسط صفحه را برش كرد ؟

----------


## mahziar

> دوست عزيزاين سمپل در ويندوز xp و در همه مدل اسكنري جواب ميده يا نه در win7 چطور ؟
> مثلا چاپگر 4 كاره اچ پي كه اسكن هم داره اين كد ها جواب ميده .
> يه سوال ديگه ، اسكنر مجازي هم وجود داره ؟ آخه خودم اسكنر ندارم و مشتري اسكنر خودشو به من نميده
> يك برگه a4 را اسكن ميكنيم آيا ميشه يك قطعه كوچك از وسط صفحه را برش كرد ؟


با سلام

در مورد اسکنر های دیگه که نمیدونم چون من فقط جنیوس دارم . در مورد فقط یه تکه از صفحه هم باید بگم ، من وقتی برنامه رو اجرا میکنم ، صفحه ویزارد خود اسکنر باز میشه که میتونی از کادر اسکن فقط یک قسمت رو برای اسکن شدن انتخاب کنی . :متفکر:

----------


## danial82

من یک اسکنر دارم که امکان اسکن کردن چندین صفحه رو داره کامپوننت یا برنامه ای میخوام که اینها رو تبدیل به یک فایل pdf  بکنه

----------


## dr_jacky_2005

> سلام
> من وقتي دكمه ي اجراي كد
> 
> ImageAcquisition ImageAcquisition = new ImageAcquisition();
> ImageAcquisition.SelectDevice();
> this.pictureBox.Image = ImageAcquisition.Capture();
> رو ميزنم هيچ اتفاقي نميفته! نميدونم چرا!!!!!!!


DLL ای که در صفحۀ اول یکی از دوستان ضمیمه کردن رو به رفرنس اضافه کن،اوکی میشه

----------


## dr_jacky_2005

> سلام خدمت دوستان عزیز :
> 
> من این کد رو تو یه سمپل برای دوستان آماده کردم ، با اسکنر Genius خودم هم بدون مشکل کار میکنه امیدوارم مشکل هاتون رو حل کنه .


جناب این درست ولی میخوام که بتونم به تصویر سایز بدم،نور و ایناشم تنظیم شه و ...

از همه مهم تر اینه که نمیخوام اون دیالوگ باکس بیاد که ازم بپرسه که رنگی باشه یا سیاه سفید یا ...   .(حتی به قیمت اینکه این کار باعث بشه دیگه نتونم به عکسم سایز بدم یا نورش رو تنظیم کنم )/

----------


## dr_jacky_2005

> من یک اسکنر دارم که امکان اسکن کردن چندین صفحه رو داره کامپوننت یا برنامه ای میخوام که اینها رو تبدیل به یک فایل pdf  بکنه


اینجاها که دنبالش نگرد!
بگرد و بپرس چطوری عکس رو به پی دی اف تبدیل کنم!

----------


## shocraneh

> DLL ای که در صفحۀ اول یکی از دوستان ضمیمه کردن رو به رفرنس اضافه کن،اوکی میشه


کدوم تاپیک مد نظر دوستمون بوده؟؟

----------


## dr_jacky_2005

> کدوم تاپیک مد نظر دوستمون بوده؟؟


اولین پست ها

توو همین تاپیک

اگه اینجا پیداش نکردی، توو نت این رو سرچ کن:

WiaLib

----------


## ashkufaraz

اینجا همه نمونه کدی برای اسکنر هست 

http://www.dynamsoft.com/Downloads/....-Download.aspx

هم برای windows form هم برای wpf

برای کار با اسکنر تحت وب هم می تونید از این استفاده کنید
http://www.dynamsoft.com/Samples/DWT...load_Demo.html

----------


## rahmatipoor

> اینجا همه نمونه کدی برای اسکنر هست 
> 
> http://www.dynamsoft.com/Downloads/....-Download.aspx
> 
> هم برای windows form هم برای wpf
> 
> برای کار با اسکنر تحت وب هم می تونید از این استفاده کنید
> http://www.dynamsoft.com/Samples/DWT...load_Demo.html


سلام و تشکر

رایگانه ؟ 
و آیا روی همه ویندوزها با همه نوع اسکنری کار میکنه؟

----------


## rahmatipoor

ما نرم افزاری داریم که به شرکتهای زیادی فروخته شده و قابلیت اسکن اسناد و مدارک رو داره. 
با توجه به اینکه مشتریها زیاد هستند و ویندوزهاشون هم همه جوره هست ( از ویندوز ایکس پی تا ویندوز 10 ).
مشکلی که هست اینه که کد اسکن هایی که توی این سایت و جاهای دیگه پیدا کردیم روی بعضی سیستمها و اسکنرها جواب میده و روی بعضی دیگه نه

مثلا یک نسخه روی 32 بیتی جواب میده روی 64 بیتی نه
یکی دیگه روی ویندوز 7 جواب میده روی ویندوز 10 جواب نمیده

حالا سوال من اینه که آیا کسی از دوستان نمونه کد یا کامپوننتی داره که روی همه ویندوزها ( ایکس پی ، 7 ، 8 ، 8.1 ، 10 ) هر دو نسخه 32 و 64 بیتی بدون مشکل کار کنه.

ممنون میشم راهنمایی کنید

این لینکی هم که این دوستمون توی پست 39 گفتند دمو هست و فقط 30 روز جواب میده بعدش باید خریداری بشه

----------

