SoFunction
Updated on 2025-03-01

C# How to get camera photos and display images

This article shares the specific code for C# to obtain the camera and display the image for your reference. The specific content is as follows

Overview

There was a requirement before, that is, the camera could be called on the web interface, and the user would display the personal QR code of the mobile phone to the camera, and the camera would use the camera to identify the user.

In fact, the essence is to save the image QR code and perform QR code recognition.

Let’s see how to implement it.

Main code implementation

1. Initialize the camera

/// <summary>
        /// Initialize the camera        /// </summary>
        /// <param name="handle">control handle</param>        /// <param name="left">The left margin starting to display</param>        /// <param name="top">The upper margin to start displaying</param>        /// <param name="width">Width to display</param>        /// <param name="height">Length to be displayed</param>        public Pick(IntPtr handle, int left, int top, int width, int height)
        {
            mControlPtr = handle;
            mWidth = width;
            mHeight = height;
            mLeft = left;
            mTop = top;
        }
        [DllImport("")]
        private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
 
 
        [DllImport("")]
        private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
        [DllImport("")]
        private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam);

2. Start displaying images

/// &lt;summary&gt;
        /// Start displaying images        /// &lt;/summary&gt;
        public void Start()
        {
            if (bStat)
                return;
 
            bStat = true;
            byte[] lpszName = new byte[100];
 
            hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);
  
            if (hWndC.ToInt32() != 0)
            {
                SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
                SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
                SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
                SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
                SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
                SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
                SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
                SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
            }
  
            return;
 
 }

3. Stop display

  /// &lt;summary&gt;
        /// Stop display        /// &lt;/summary&gt;
        public void Stop()
        {
            SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
            bStat = false;
}

4. Capture pictures

 /// &lt;summary&gt;
        /// Snap pictures        /// &lt;/summary&gt;
        /// <param name="path">Path to save the bmp file</param>        public void GrabImage(string path)
        { 
            IntPtr hBmp = (path);
            SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64());
        }  
        /// &lt;summary&gt;
        /// Video        /// &lt;/summary&gt;
        /// <param name="path">Path to save the avi file</param>        public void Kinescope(string path)
        {
            IntPtr hBmp = (path);
            SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64());
            SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
        }
  
        /// &lt;summary&gt;
        /// Stop recording        /// &lt;/summary&gt;
        public void StopKinescope()
        {
            SendMessage(hWndC, WM_CAP_STOP, 0, 0);
 }

Complete code

using System;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ; 
using ;
using ;
using ;
using ;
using ;
 
public partial class Decode : 
{
   // public delegate void SaveImg(Pick Pick1);
    /// &lt;summary&gt;
    /// A class that controls cameras    /// &lt;/summary&gt;
    public class Pick
    {
        private const int WM_USER = 0x400;
        private const int WS_CHILD = 0x40000000;
        private const int WS_VISIBLE = 0x10000000;
        private const int WM_CAP_START = WM_USER;
        private const int WM_CAP_STOP = WM_CAP_START + 68;
        private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
        private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
        private const int WM_CAP_SAVEDIB = WM_CAP_START + 25;
        private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
        private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;
        private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
        private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63;
        private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51;
        private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
        private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
        private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;
        private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;
        private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;
        private const int WM_CAP_SET_SCALE = WM_CAP_START + 53;
        private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;
        private IntPtr hWndC;
        private bool bStat = false;
        private IntPtr mControlPtr;
        private int mWidth;
        private int mHeight;
        private int mLeft;
        private int mTop;

        /// &lt;summary&gt;
        /// Initialize the camera        /// &lt;/summary&gt;
        /// <param name="handle">control handle</param>        /// <param name="left">The left margin starting to display</param>        /// <param name="top">The upper margin to start displaying</param>        /// <param name="width">Width to display</param>        /// <param name="height">Length to be displayed</param>        public Pick(IntPtr handle, int left, int top, int width, int height)
{
            mControlPtr = handle;
            mWidth = width;
            mHeight = height;
            mLeft = left;
            mTop = top;
        }
        [DllImport("")]
        private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
 
 
        [DllImport("")]
        private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
        [DllImport("")]
        private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam);
 
        /// &lt;summary&gt;
        /// Start displaying images        /// &lt;/summary&gt;
        public void Start()
{
            if (bStat)
                return;
            bStat = true;
            byte[] lpszName = new byte[100];
 
 
            hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);
  
            if (hWndC.ToInt32() != 0)
            {
                SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
                SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
                SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
                SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
                SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
                SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
                SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
                SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
            }
 
            return;
 
        }
  
/// &lt;summary&gt;
/// Stop display/// &lt;/summary&gt;
public void Stop()
{
            SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
            bStat = false;
        }
        /// &lt;summary&gt;
        /// Snap pictures        /// &lt;/summary&gt;
        /// <param name="path">Path to save the bmp file</param>        public void GrabImage(string path)
{
 
 
            IntPtr hBmp = (path);
            SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64());
 
 
        }

        /// &lt;summary&gt;
        /// Video        /// &lt;/summary&gt;
        /// <param name="path">Path to save the avi file</param>        public void Kinescope(string path)
{
            IntPtr hBmp = (path);
            SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64());
            SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
        }

        /// &lt;summary&gt;
        /// Stop recording        /// &lt;/summary&gt;
        public void StopKinescope()
{
            SendMessage(hWndC, WM_CAP_STOP, 0, 0);
        }

    }

    protected void Page_Load(object sender, EventArgs e)
{
       
    }
    //void DoInit()
    //{
    //     frm = new Form();
    //     = 300;
    //     = 300;
    //     Panel = new ();
    //     = 300;
    //     = 300;
    //     = true;
    //     = ;
    //    (Panel);
    //     = true;
    //    Pick p = new Pick(, 0, 0, 300, 300);
    //    ();
    //    ();
    //    (("img\\"));
    //    (("img\\"));
    //    ();
    //    ();
    //    ();
    //}

    private void getQrcode()
{
        try
        {
           
            //ThreadStart worker = new ThreadStart(DoInit);
            //Thread th = new Thread(worker);
            // = true;
            //();
             frm = new Form();
             = 300;
             = 300;
             Panel = new ();
             = 300;
             = 300;
             = true;
             = ;
            (Panel);
             = true;
            Pick p = new Pick(, 0, 0, 300, 300);
            ();
            int i = 1;
            while (i &lt;= 1)
            {
                (("img\\"));
                (("img\\"));
                i++;
            }
            ();
            ();
            ();
            try
            {
                 d = new ();
                RGBLuminanceSource rg = new RGBLuminanceSource(new (("img\\")), new (("img\\")).Width, new (("img\\")).Height);
                 ls = rg;
                HybridBinarizer hb = new HybridBinarizer(ls);
                 bm = new (hb);
                 r = (bm);
                 = ;

            }
            catch (Exception ex)
            {

                 = "";
                //(+"111");
 
 
                throw new Exception();
            }

        }
        catch (Exception ee)
        {
            ();
        }
    }
    protected void Timer1_Tick(object sender, EventArgs e)
{
        //getQrcode();
    }
    protected void Button1_Click(object sender, EventArgs e)
{
        getQrcode();
    }
 
 
}

The above is all the content of this article. I hope it will be helpful to everyone's study and I hope everyone will support me more.