读取二代身份证上的相片,函数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关联使用,并确认通讯端口处于关闭状态;

你可能感兴趣的:(file,byte,button,textbox,照片,path)