PDA

View Full Version : بهترین کامپوننت برای کار با اسکنر



مهدی رحیم زاده
دوشنبه 17 فروردین 1388, 06:51 صبح
سلام من برای کار بااسکنر دنبال 1 کامپوننت عالی می گردم . یه دونه دارم اما زیاد ازش خوشم نمیاد .
میشه دوستان عزیز معرفی کنن .
با تشکر

Happy_davood
دوشنبه 17 فروردین 1388, 08:17 صبح
فکر نکنم نیاز به کامپوننت خاصی باشه . خودتون هم می تونید بنویسید . من یک بار این کار رو کردم و نتیجه هم داد .
جمعاً سه تا تابع : SelectDevice و DeviceSetting و Capture
تبدیل به یه کلاس کردم و استفاده می کنم .




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
}

مهدی رحیم زاده
جمعه 21 فروردین 1388, 14:48 عصر
private WIALib.WiaClass WiaClass;
private WIALib.ItemClass ItemClass;
private WIALib.CollectionClass CollectionClassDevices;
private WIALib.CollectionClass CollectionClassPics;
روی اینا اشکال میگیره و میگه Reference بده ؟
چکار کنم ؟

Happy_davood
جمعه 21 فروردین 1388, 14:54 عصر
ای بابا این دیگه پرسیدن نداره .
WIALib رو به Refrence های پروژه خودتون اضافه کنید دیگه.

مهدی رحیم زاده
جمعه 21 فروردین 1388, 15:09 عصر
WIALib توی کدوم NameSpace قرار دادره ؟ من اینو نمی دونم .

Happy_davood
جمعه 21 فروردین 1388, 15:17 عصر
یادم نیست . به نظرم باید این DLL رو به پروژه اضافه کنید WiaLib.dll
یه سرچ تو گوگل بزنید . کلی نتیجه میاد که چند تای اولش هم تو CodeProject هست . از اونجا یه پروژه دانلود کنید و DLL رو بردارید و حجم Dll فقط 34 ~ 40 کیلوبایت میشه

Happy_davood
جمعه 21 فروردین 1388, 15:18 عصر
چه طوری میشه فایل آپلود کرد از اینجا من بفرستم ؟!

Happy_davood
جمعه 21 فروردین 1388, 15:23 عصر
پیدا کردم
توی رRefrence ها
قسمت COM
Microsoft Windows Image Acquisition 1.01 Type Library

اوکی !؟

مهدی رحیم زاده
جمعه 21 فروردین 1388, 16:27 عصر
با تشکر
برای آپلود هم کافیه که مدیریت ضمیمه ها رو بزنی .
دستت درد نکنه

مهدی رحیم زاده
جمعه 15 خرداد 1388, 19:10 عصر
سلام
من نمی دونم با این کلاسی که دوستومون نوشتن چطور باید قبل از اسکن تنظیماتش رو هم فراخوانی کنم . مثلا اینکه عکس با چه رزولیشنی اسکن بشه ؟
کسی میدونه ؟
با تشکر

hooooman
یک شنبه 17 خرداد 1388, 22:16 عصر
فکر نکنم نیاز به کامپوننت خاصی باشه . خودتون هم می تونید بنویسید . من یک بار این کار رو کردم و نتیجه هم داد .
جمعاً سه تا تابع : SelectDevice و DeviceSetting و Capture
تبدیل به یه کلاس کردم و استفاده می کنم .




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
}



ببخشین
میدونم این بحث مال خیلی وقت پیشه اما میخاستم ببینم از این کلاس چجوری باید استفاده کرد؟
اگه میشه 1 نمونه بذارین

danial82
چهارشنبه 31 شهریور 1389, 10:12 صبح
من یک اسکنر دارم که امکان اسکن کردن چندین صفحه رو داره کامپوننت یا برنامه ای میخوام که اینها رو تبدیل به یک فایل pdf بکنه