سلام و خسته نباشید
من یه پروژه دارم که توی بخشی از اون میخوام یه تصویر رو از طریق اسکنر اسکن کرده و در دیتابیس ذخیره کنم ممنون میشم راهنمایی بفرمائید
Printable View
سلام و خسته نباشید
من یه پروژه دارم که توی بخشی از اون میخوام یه تصویر رو از طریق اسکنر اسکن کرده و در دیتابیس ذخیره کنم ممنون میشم راهنمایی بفرمائید
Twain یک API شناخته شده و استاندارد ئه که اسکنر ها ساپورتش می کنند و کار کردن باهاش راحته. یک پکیج دلخواه تون مثلا NTwain رو به پروژه تون در ویژوال استدیو اضافه می کنید و بعد با چند سطر کد لیست اسکنر ها رو میارید یا درخواست اسکن میکنید و وقتی تصویر دریافت شد با یک رخداد متوجه میشید و دریافتش می کنید.
اگه روی سیستم تون اسکنر واقعی ندارید که پروژه رو باهاش تست کنید، یک نسخه اسکنر مجازی رو از اینجا می توانید دانلود کنید :
https://developer.dynamsoft.com/dwt/kb/2659
داخل ویژوال استدیو که پروژه تون رو باز کردید، در منوی ...Tools > NuGet Package Manager > Manage NuGet Packages for Solution در زبانه Browse عنوان NTwain رو جستجو می کنید تا تیک بزنید و Install کنید.
بعد داخل کد پروژه همچین فیلد هایی رو لازم دارید :
public partial class Form1 : Form
{
private static readonly NTwain.Data.TWIdentity TwainAppId = NTwain.Data.TWIdentity.CreateFromAssembly(
NTwain.Data.DataGroups.Image | NTwain.Data.DataGroups.Control, System.Reflection.Assembly.GetEntryAssembly());
private NTwain.TwainSession _session;
public Form1()
{
InitializeComponent();
}
و اینطوری session میسازید و یک اسکنر رو انتخاب می کنید :
private void button1_Click(object sender, EventArgs e)
{
_session = new NTwain.TwainSession(TwainAppId);
_session.Open();
var source = _session.ShowSourceSelector();
source?.Open();
_session.DataTransferred += session_DataTransferred;
}
و اینطوری در اون session باز و با اون اسکنر انتخاب شده عمل اسکن رو انجام میدید (با تنظیمات نمایشی) :
private void button2_Click(object sender, EventArgs e)
{
_session.CurrentSource.Enable(NTwain.SourceEnableM ode.ShowUI, true, this.Handle);
}
یا بی تنظیمات نمایشی :
private void button4_Click(object sender, EventArgs e)
{
_session.CurrentSource.Enable(NTwain.SourceEnableM ode.NoUI, true, this.Handle);
}
و این عمل اسکن تصویر باعث وقوع رخداد DataTransferred میشه :
private void session_DataTransferred(object sender, NTwain.DataTransferredEventArgs e)
{
using (var stream = e.GetNativeImageStream())
{
pictureBox1.BackgroundImage = Image.FromStream(stream);
}
}
و شما می توانید اون stream رو به آرایه ای از بایت ها تبدیل کرده و در بانک اطلاعاتی ذخیره کنید :
private void session_DataTransferred(object sender, NTwain.DataTransferredEventArgs e)
{
using (var memoryStream = new System.IO.MemoryStream())
{
using (var stream = e.GetNativeImageStream())
{
var buffer = new byte[8192];
int length;
while ((length = stream.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStream.Write(buffer, 0, length);
}
var bytes = memoryStream.ToArray();
// Write bytes in database
}
}
}
و هر زمان کار تون با اسکنر تموم شد یادتون نره که session رو ببندید :
private void button3_Click(object sender, EventArgs e)
{
_session.Close();
}
سلام ممنون از پاسخگوییتون . فقط میشه بفرمایید api NTwain رو از کجا دانلود کنم لطفا یه لینک که بشه ازش دانلود کرد رو بدین ممنون
ممنون میشم بفرمایید لایسنسش چیه؟
بهتر بود از داخل همون ویژوال استدیو با NuGet که توضیح دادم اینکار رو انجام بدید، نه اینکه مستقیم دانلودش کنید.
https://github.com/soukoku/ntwain
MIT License
https://raw.githubusercontent.com/so...v3/LICENSE.txt
پروانه امآیتی
ضمیمه 151220سلام من توی tools اون گزینه رو نداشتم بخاطر همون خواستم دانلود کنم
اون گزینه که فرمودن تو قسمت tools->library pakage manager هست