新增影像格式支援
WIA 迷你驅動程式會將影像格式報告至 IWiaMiniDrv::d rvGetWiaFormatInfo 方法中的 WIA 服務。
實作 IWiaMiniDrv::d rvGetWiaFormatInfo
WIA 服務會呼叫 IWiaMiniDrv::d rvGetWiaFormatInfo 方法來取得 WIA 裝置支援的 TYMED 和 FORMAT 配對。
WIA 驅動程式應該配置要儲存在此 WIA 驅動程式中的記憶體 (,並由此 WIA 驅動程式) 釋放,以包含Microsoft Windows SDK檔) 中所述的WIA_FORMAT_INFO (結構陣列。 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;
}