WIA è l’acronimo di Windows Image Acquisition ed è stato introdotto fin da Windows ME. Nato per ovviare ai tanti problemi nell’usare il vecchio protocollo TWAIN, oggi è divenuto la base di tutte le periferiche di acquisizione. Il fulcro di questo articolo è spiegare come utilizzarlo nelle nostre applicazioni C/C++, come ad esempio nell’applicazione Vikings I ( software per magazzino ) che sfrutta questa tecnologia per acquisire immagini da inserire nel database.
Innanzitutto affinchè il programma non si blocchi si deve creare un worker thread che faccia tutto il lavoro e vedere quando ha finito con un semaforo:
CWinThread* pThread = AfxBeginThread(AcquireThreadProc, this); AfxGetMainWnd()->EnableWindow(FALSE); while (MsgWaitForMultipleObjects(1, &pThread->m_hThread, FALSE, INFINITE, QS_ALLINPUT, QS_ALLPOSTMESSAGE) == WAIT_OBJECT_0 + 1) { MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
Ecco il codice per attendere la fine dell’acquisizione, intanto possiamo vedere come deve essere implementato il thread inizializzato come AcquireThreadProc, una semplice funzione CALLBACK statica che deve inizializzare l’oggetto COM ( Component Object Model ) IWiaDevMgr in questo modo:
CoInitialize(NULL); CComPtr pDev; HRESULT hr = pDev.CoCreateInstance(CLSID_WiaDevMgr); if (hr != S_OK) { CoUninitialize(); return 1; }
Ultima cosa da fare ed anche la più semplice è richiamare il metodo GetImageDlg dell’oggetto IWiaDevMgr creato prima:
GUID guidFormat = GUID_NULL; HRESUT hr = pDev->GetImageDlg(((CWnd*)pParam)->m_hWnd, StiDeviceTypeDefault, WIA_DEVICE_DIALOG_SINGLE_IMAGE, WIA_INTENT_NONE, NULL, szBuffer, &guidFormat); if (FAILED(hr)) { CoUninitialize(); return 1; }
Con quest’ultimo metodo abbiamo finito, ma se vogliamo andare più in profondità e gestire nei minimi dettagli l’acquisizione ci sono molti altri metodi dell’oggetto che servono più che atro per personalizzare le varie fasi di questa procedura. Ricordo che possiamo acquisire immagini e foto da scanner, videocamere e tutto quell’hardware compatibile con la tecnologia WIA ( Windows Image Acquisition ).
La nostra ultima applicazione sfrutta proprio questa tecnologia per acquisire immagini ed inserirle nel database dei clienti, fornitori, articoli di magazzino, dipendenti ed altro e la potete trovare sul nostro sito.