讀取二代身份證上的相片,函式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關聯使用,並確認通訊埠處於關閉狀態;