منوهای نصب در پنل مدیریت

آموزش خواندن بارکد QRCode به زبان سی شارپ

در مطالب قبلی آموزش تولید و یا Encode بار کد QRCode را بصورت کامل برایتان شرح دادیم (برای مشاهده مطلب اینجا کلیک کنید)، حال در این پست قصد داریم نحوه خواندن یا Decode آن به وسیله WebCam و یا فایل تصویری بصورت حرفه ای برای شما عزیزان شرح دهیم. برای انجام این امر می بایست از کامپوننت و یا کتابخانه ZXing (که لازم به ذکر است برترین Decoder موجود برای QRCode می باشد) برای خواندن بارکد QRCode و از کتابخانه WebCamCapture برای بکار گیری وب کم در برنامه استفاده نماییم که آموزش و لینک دانلود سورس و کتابخانه در ادامه مطب قابل مشاهده است.

توضیحات:

برای خواندن بارکد از طریق WebCam باید از یک کنترل BackgroundWorker استفاده نماییم، به این دلیل که در هنگامی که وبکم روشن است، باید تصویر آن را بصورت لحظه ای دریافت و در یک MemoryStream ذخیره شده و بر روی آن پردازش شود که در این تصویر بارکدی وجود دارد و یا خیر! در صورتی که یک بارکد QRCode جلوی وبکم بگیریم، آن را سریعا تشخیض داده و در پیغامی، متن ذخیره شده در آن را نمایش می دهد. و همچنین به دلیل اینکه وبکم به صورت فریم بر فریم کار می کند ممکن است تا شما بارکد را روی آن قرار می دهید به تعداد دفعات زیادی پیغام متن بارکد را نمایش دهد، برای جلوگیری از این امر، در هر باری که بارکدی در وب کم تشخیص داده می شود، یکبار آن را خاموش و دوباره روشن می کند تا حالت Loop در آن اتفاق نیفتد.

QRCode Form

آموزش خواندن بارکد QRCode بوسیله وبکم:

ابتدا باید دو کتابخانه zxing.dll و WebCamCapture.dll را به رفرنس های پروژه خود در Visual Studio اضافه نمایید.

یک کنترل WebCam روی فرم اضافه نمایید و نام آن را WebCam بگذارید.

در قسمت Form_Load کد زیر را بنویسید: (برای روشن کردن وب کم – استفاده از BackgroundWorker – تعیین سایز تصویر)

WebCam.Start(); //Start webcam capturing

BackgroundWorker b_w = new BackgroundWorker(); // Start a new backgroundworker
b_w.DoWork += b_w_DoWork;
b_w.RunWorkerCompleted += b_w_RunWorkerCompleted;
b_w.RunWorkerAsync();
//---------------------------------
int width = WebCam.Size.Width; //Capture a picture from webcam
int height = WebCam.Size.Height;
ms = new MemoryStream(); // Save captured picture into MemoryStream (RAM)
using (Bitmap bmp = new Bitmap(width, height))
{
      WebCam.DrawToBitmap(bmp, new Rectangle(0, 0, width, height));
      bmp.Save(ms, ImageFormat.Jpeg);// Draw as a bitmap and save to memory stream
}

حال کد های مربوط به عملیات (DoWork و RunWorkerCompleted) کنترل BackgroundWorker را به بخش کد ها اضافه نمایید:

void b_w_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    try
    {
        //userControl11.Stop();
        int width = WebCam.Size.Width;
        int height = WebCam.Size.Height;
        ms = new MemoryStream();
        using (Bitmap bmp = new Bitmap(width, height))
        {
            WebCam.DrawToBitmap(bmp, new Rectangle(0, 0, width, height));
            // bmp.Save("Temp\\qr.jpg", ImageFormat.Jpeg);//save to file
            bmp.Save(ms, ImageFormat.Jpeg);//save to memory stream
        }
    }
    catch { }
            
    if (text == null)
    {
        b_w.RunWorkerAsync();
    }
    else
    {
        WebCam.Stop();
        MessageBox.Show(text);
        text = null;
        ms.Close();
        ms.Flush();
        WebCam.Start();
        b_w.RunWorkerAsync();

    }
}

void b_w_DoWork(object sender, DoWorkEventArgs e)
{
    try
    {
        IBarcodeReader reader = new BarcodeReader();
        // load a bitmap
        var barcodeBitmap = (Bitmap)Bitmap.FromStream(ms);
        // detect and decode the barcode inside the bitmap
        var result = reader.Decode(barcodeBitmap);
        // do something with the result
        if (result != null)
        {
            //txtDecoderType.Text = result.BarcodeFormat.ToString();
            text = result.Text;
        }
    }
    catch { text = null; }
}

تمامی کد های بالا برای خواندن بارکد QRCode از طریق وبکم بود، برای خواندن بارکد از طریق فایل تصویری یا عکس یک کنترل Button در فرم اضافه کرده و در بخش کد Click آن کد زیر را بنویسید:

OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "PNG Files|*.png|JPG Files|*.jpg|Bitmap|*.bmp|GIF|*.gif";
if (dlg.ShowDialog() == DialogResult.OK)
{
 try
 {
 IBarcodeReader reader = new BarcodeReader();
 // load a bitmap
 var barcodeBitmap = (Bitmap)Bitmap.FromFile(dlg.FileName);
 // detect and decode the barcode inside the bitmap
 var result = reader.Decode(barcodeBitmap);
 // do something with the result
 if (result != null)
 {
 //txtDecoderType.Text = result.BarcodeFormat.ToString();
 MessageBox.Show(result.Text);
 }
 }
 catch { text = null; }
}

با استفاده از کد بالا یک دیالوگ OpenFileDialog نمایش داده می شود و ورودی عکس با فرمت PNG – JPG – GIF – BMP میگیرد، آن را با به Bitmap تبدیل می کند (به این دلیل که ورودی تابع BarcodeReader فقط Bitmap می تواند باشد) و آن را توسط BarcodeReader دیکد کرده و در صورتی که محتوای آن خالی نباشد، آن را بصورت یک MessageBox نمایش می دهد.

به همین سادگی! از برنامتون لذت ببرید.


سایت رسمی ZXing: کلیک کنید

ZXing در CodePlex: کلیک کنید

ZXing در GitHub: کلیک کنید

 

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

 

3 پاسخ در "آموزش خواندن بارکد QRCode به زبان سی شارپ"

  1. سلام. لطفا رمز فایل رو بگید نمی تونم کامل لذت ببرم. ممنون

  2. ضمن تشکر از زحمات نویسنده محترم مقاله
    پسورد فایل بصورت زیر میباشد:
    developersian.com

  3. با سلام من میخوام از این برنامه استفاده کنم اما نمیدونم چطوری باید از کنترل web cam استفاده کنم آخه تو لیست toolbox نیست ممنون میشم راهنمایی کنین

ارسال یک پیغام

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2017 © تمامي حقوق مطالب سايت Developersian محفوظ و همچنین استفاده از مطالب سایت با ذکر منبع بلامانع است.
X