共用方式為


新增影像格式支援

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;
}