다음을 통해 공유


이미지 형식 지원 추가

WIA 미니드라이버가 IWiaMiniDrv::d rvGetWiaFormatInfo 메서드의 WIA 서비스에 이미지 형식을 보고합니다.

IWiaMiniDrv::d rvGetWiaFormatInfo 구현

WIA 서비스는 IWiaMiniDrv::d rvGetWiaFormatInfo 메서드를 호출하여 WIA 디바이스 지원 TYMED 및 FORMAT 쌍을 가져옵니다.

WIA 드라이버는 Microsoft Windows SDK 설명서에 설명된 WIA_FORMAT_INFO 구조체 배열을 포함하도록 메모리를 할당해야 합니다(이 WIA 드라이버에 저장되고 이 WIA 드라이버에서 해제). 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;
}