WIA 迷你驅動程式會將影像格式報告至 IWiaMiniDrv::d rvGetWiaFormatInfo 方法中的 WIA 服務。
實作 IWiaMiniDrv::drvGetWiaFormatInfo
WIA 服務會呼叫 IWiaMiniDrv::d rvGetWiaFormatInfo 方法,以取得 WIA 裝置支援的 TYMED 和 FORMAT 配對。
WIA 驅動程式應該配置記憶體(要儲存在此 WIA 驅動程式中,並由此 WIA 驅動程式釋放),以包含 WIA_FORMAT_INFO 結構體(如 Microsoft Windows SDK 檔所述)。 WIA 驅動程式配置的記憶體指標應該傳遞至 ppwfi。 這不是直接完成的,而是使用指標到指標。 在下列範例中,ppwfi 會使用 m_WIAFormatInfo[0] 的地址進行設定,接著會評估為結構中第一個成員的位址。
請務必注意,WIA 服務不會釋放此記憶體。 WIA 驅動程式負責管理此配置的記憶體。
WIA 驅動程式應該寫入已配置在 pcelt 參數所指向的記憶體位置的結構體數量。
WIA 裝置應將WIA_FORMAT_INFO結構的 guidFormatID 成員設定為影像格式 GUID。 裝置應該將此結構的 lTymed 成員設定為與影像格式 GUID 相關聯的 TYMED 值:
有效的 TYMED 值(也稱為「媒體類型」) 為:
TYMED_FILE
TYMED_MULTIPAGE_FILE
TYMED_CALLBACK
TYMED_MULTIPAGE_CALLBACK
下列範例示範 IWiaMiniDrv::d rvGetWiaFormatInfo 的實作:
HRESULT _stdcall CWIADevice::drvGetWiaFormatInfo(
BYTE *pWiasContext,
LONG lFlags,
LONG *pcelt,
WIA_FORMAT_INFO **ppwfi,
LONG *plDevErrVal)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if ((!pWiasContext)||(!plDevErrVal)||(!pcelt)||(!ppwfi)) {
return E_INVALIDARG;
}
//
// check if WIA_FORMAT_INFO array has been initialized.
//
// NOTE: m_WIAFormatInfo is a member variable that has been
// defined as WIA_FORMAT_INFO m_WIAFormatInfo[2];
//
//
if (m_WIAFormatInfo[0].lTymed == TYMED_NULL) {
//
// add all supported formats and corresponding TYMED values
// here
//
m_WIAFormatInfo[0].guidFormatID = WiaImgFmt_MEMORYBMP;
m_WIAFormatInfo[0].lTymed = TYMED_CALLBACK;
m_WIAFormatInfo[1].guidFormatID = WiaImgFmt_BMP;
m_WIAFormatInfo[1].lTymed = TYMED_FILE;
}
*plDevErrVal = 0;
*ppwfi = &m_WIAFormatInfo[0];
*pcelt = 2; // number of formats in returned array
return S_OK;
}