添加图像格式支持

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