1. 程式人生 > >讀取二代身份證上的相片,函式GetBmp(char * Wlt_File,int intf) 怎麼用?

讀取二代身份證上的相片,函式GetBmp(char * Wlt_File,int intf) 怎麼用?

今天看到很多網友對於讀取二代身份證上的相片遇到了麻煩,GetBmp(char * Wlt_File,int intf) 這個函式不知道怎麼用。下面是我做的小例項,僅供參考,希望能幫到大家。

public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }
        #region API宣告
        [DllImport("sdtapi.dll", CallingConvention = CallingConvention.StdCall)]
        static extern int SDT_StartFindIDCard (int iPort,  byte[] pucManaInfo,int iIfOpen);
        [DllImport("sdtapi.dll",CallingConvention = CallingConvention.StdCall)]
        static extern int SDT_SelectIDCard (int iPort , byte[] pucManaMsg,int iIfOpen);
        [DllImport("sdtapi.dll",CallingConvention = CallingConvention.StdCall)]
        static extern int SDT_ReadBaseMsg (int iPort, byte[] pucCHMsg, ref UInt32 puiCHMsgLen, byte[] pucPHMsg,ref UInt32 puiPHMsgLen,int iIfOpen);
        [DllImport("WltRS.dll", CallingConvention = CallingConvention.StdCall)]
        static extern int GetBmp(string pucPHMsg, int intf);
        #endregion
        byte[] pucPHMsg = new byte[3024];

        //讀卡操作按鈕事件
        private void button1_Click(object sender, EventArgs e)
        {
            //變數宣告
            byte[] CardPUCIIN = new byte[255];
            byte[] pucManaMsg = new byte[255];
            byte[] pucCHMsg = new byte[255];
           
            UInt32 puiCHMsgLen = 0;
            UInt32 puiPHMsgLen = 0;
            int st = 0;
            //讀卡操作
            st = SDT_StartFindIDCard(1001, CardPUCIIN, 1);
            if (st != 0x9f) return;
            st = SDT_SelectIDCard(1001, pucManaMsg, 1);
            if (st != 0x90) return;
            st = SDT_ReadBaseMsg(1001, pucCHMsg, ref puiCHMsgLen, pucPHMsg, ref puiPHMsgLen, 1);
            if (st != 0x90) return;
            //顯示結果
            textBox1.Text = System.Text.ASCIIEncoding.Unicode.GetString(pucCHMsg);
        }

       
        //照片儲存按鈕事件
        private void button2_Click(object sender, EventArgs e)
        {
            FolderDialog fDialog = new FolderDialog();
            fDialog.DisplayDialog();

            string path = fDialog.Path + @"/" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".wlt";
            File.Delete(path);
            FileStream fs = File.Open(path, FileMode.Append);
            fs.Write(pucPHMsg, 0, pucPHMsg.Length);
            fs.Close();

            int img = GetBmp(fDialog.Path + @"/" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".wlt", 2);
        }

    }

說明:照片的資訊其實是儲存在pucPHMsg變數裡面的,需要做的就是將pucPHMsg變數中的照片資訊先轉換為.wlt檔案,再通過GetBmp函式將其轉成Bmp檔案即可。

三、函式列表
GetBmp(char * Wlt_File,int intf) wlt檔案解碼成bmp檔案;

四、函式說明
原 型:int GetBmp(char * Wlt_File,int intf);
說 明:本函式用於將wlt檔案解碼成bmp檔案。
參 數:Wlt_File ----- wlt檔名
  intf ----- 閱讀裝置通訊介面型別(1—RS-232C,2—USB)
返 回 值:生成*.bmp檔案和以下返回資訊
值 意義
1 相片解碼解碼正確
0 呼叫sdtapi.dll錯誤
-1 相片解碼錯誤
-2 wlt檔案字尾錯誤
-3 wlt檔案開啟錯誤
-4 wlt檔案格式錯誤
-5 軟體未授權
-6 裝置連線錯誤

五、注意事項
1、 wlt檔案的字尾要固定為”.wlt”,如:xp.wlt,相片解碼成xp.bmp;
2、 本函式要與sdtapi.dll關聯使用,並確認通訊埠處於關閉狀態;