मैं वास्तव में फिंगरप्रिंट सेंसर से छवि को सहेजने के लिए कोड एकत्र करने का प्रयास कर रहा हूं। मैंने पहले ही फ़ोरम की कोशिश की है और यह मेरा वर्तमान कोड है जो फ़ाइल को सही फ़ाइल आकार के साथ सहेजता है लेकिन जब मैं छवि खोलता हूं, तो यह फिंगरप्रिंट की छवि नहीं है बल्कि यह दूषित छवि की तरह दिखता है। यहां है कि यह कैसा लग रहा है।फ़िंगरप्रिंट सेंसर से सहेजी गई छवि दूषित
मेरे कोड नीचे दी गई है। किसी भी तरह की सहायता को आभार समझेंगे। मैं विंडोज़ विकास के लिए नया हूँ।
bool SaveBMP(BYTE* Buffer, int width, int height, long paddedsize, LPCTSTR bmpfile)
{
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER info;
memset(&bmfh, 0, sizeof(BITMAPFILEHEADER));
memset(&info, 0, sizeof(BITMAPINFOHEADER));
//Next we fill the file header with data:
bmfh.bfType = 0x4d42; // 0x4d42 = 'BM'
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfSize = sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) + paddedsize;
bmfh.bfOffBits = 0x36;
//and the info header:
info.biSize = sizeof(BITMAPINFOHEADER);
info.biWidth = width;
info.biHeight = height;
info.biPlanes = 1;
info.biBitCount = 8;
info.biCompression = BI_RGB;
info.biSizeImage = 0;
info.biXPelsPerMeter = 0x0ec4;
info.biYPelsPerMeter = 0x0ec4;
info.biClrUsed = 0;
info.biClrImportant = 0;
HANDLE file = CreateFile(bmpfile, GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//Now we write the file header and info header:
unsigned long bwritten;
if (WriteFile(file, &bmfh, sizeof(BITMAPFILEHEADER),
&bwritten, NULL) == false)
{
CloseHandle(file);
return false;
}
if (WriteFile(file, &info, sizeof(BITMAPINFOHEADER),
&bwritten, NULL) == false)
{
CloseHandle(file);
return false;
}
//and finally the image data:
if (WriteFile(file, Buffer, paddedsize, &bwritten, NULL) == false)
{
CloseHandle(file);
return false;
}
//Now we can close our function with
CloseHandle(file);
return true;
}
HRESULT CaptureSample()
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
PWINBIO_BIR sample = NULL;
SIZE_T sampleSize = 0;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Access: Capture raw data
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
WINBIO_DB_DEFAULT, // Default database
&sessionHandle // [out] Session handle
);
// Capture a biometric sample.
wprintf_s(L"\n Calling WinBioCaptureSample - Swipe sensor...\n");
hr = WinBioCaptureSample(
sessionHandle,
WINBIO_NO_PURPOSE_AVAILABLE,
WINBIO_DATA_FLAG_RAW,
&unitId,
&sample,
&sampleSize,
&rejectDetail
);
wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
wprintf_s(L"\n Captured %d bytes.\n", sampleSize);
PWINBIO_BIR_HEADER BirHeader = (PWINBIO_BIR_HEADER)(((PBYTE)sample) + sample->HeaderBlock.Offset);
PWINBIO_BDB_ANSI_381_HEADER AnsiBdbHeader = (PWINBIO_BDB_ANSI_381_HEADER)(((PBYTE)sample) + sample->StandardDataBlock.Offset);
PWINBIO_BDB_ANSI_381_RECORD AnsiBdbRecord = (PWINBIO_BDB_ANSI_381_RECORD)(((PBYTE)AnsiBdbHeader) + sizeof(WINBIO_BDB_ANSI_381_HEADER));
PBYTE firstPixel = (PBYTE)((PBYTE)AnsiBdbRecord) + sizeof(WINBIO_BDB_ANSI_381_RECORD);
SaveBMP(firstPixel, AnsiBdbRecord->HorizontalLineLength, AnsiBdbRecord->VerticalLineLength, AnsiBdbRecord->BlockLength, "D://test.bmp");
wprintf_s(L"\n Press any key to exit.");
_getch();
}
[BITMAPINFOHEADER] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd318229.aspx): * "अगर ** biCompression ** के बराबर होती है ** BI_RGB ** और बिटमैप 8 बीपीपी या उससे कम का उपयोग करता है, बिटमैप में ** बिटमैपिनफोइडर ** संरचना के बाद तत्काल रंगीन रंग होता है। रंग तालिका में ** RGBQUAD ** मानों की एक सरणी होती है। सरणी का आकार ** द्वारा दिया जाता है biClrUsed ** सदस्य। यदि ** biClrUsed ** शून्य है, तो सरणी में दिए गए बिटडेपथ के लिए रंगों की अधिकतम संख्या होती है; यानी, 2^** biBitCount ** रंग। "* – IInspectable
फ़िंगरप्रिंट सीधे किसी कंप्यूटर से कनेक्ट होता है या माइक्रो नियंत्रक? आप अपने सिस्टम पर उंगली प्रिंट कैसे कनेक्ट करते हैं? –
नहीं, यह सीधे यूएसबी का उपयोग कर पीसी से जुड़ा हुआ है। –