【问题标题】:Obtaining an image/scan with WIA使用 WIA 获取图像/扫描
【发布时间】:2012-08-24 06:24:08
【问题描述】:

我是 WIA 的新手。我以某种方式设法获取设备列表,选择我的设备并枚举该设备以获取图像项。但是现在,当我尝试传输图像时,我被卡住了。如果我使用根项进行数据传输pWiaDataTransfer->idtGetData 返回 HRESULT 为 0x8000FFFF (E_UNEXPECTED),如果我使用图像项(我的设备上只有两个项 'root' 和 'top'),当我获得存储接口。我想也许我需要从“root”获取存储接口,从“top”获取数据传输接口,但这也失败了(当我尝试获取数据传输接口时)。然后我得到 0x80004002(E_NOINTERFACE - 不支持此类接口。)。代码如下:

HRESULT TransferWiaItem( IWiaItem *pWiaItem, IWiaItem *pWiaItem2 )
{
    IWiaPropertyStorage *pWiaPropertyStorage = NULL;
    HRESULT hr = pWiaItem->QueryInterface( IID_IWiaPropertyStorage, (void**)&pWiaPropertyStorage );
    if( SUCCEEDED( hr ) )
    {
        PROPSPEC PropSpec[2] = {0};
        PROPVARIANT PropVariant[2] = {0};
        const ULONG c_nPropCount = sizeof(PropVariant)/sizeof(PropVariant[0]);
        GUID guidOutputFormat = WiaImgFmt_BMP;
        PropSpec[0].ulKind = PRSPEC_PROPID;
        PropSpec[0].propid = WIA_IPA_FORMAT;
        PropSpec[1].ulKind = PRSPEC_PROPID;
        PropSpec[1].propid = WIA_IPA_TYMED;
        PropVariant[0].vt = VT_CLSID;
        PropVariant[0].puuid = &guidOutputFormat;
        PropVariant[1].vt = VT_I4;
        PropVariant[1].lVal = TYMED_FILE;
        hr = pWiaPropertyStorage->WriteMultiple( c_nPropCount, PropSpec, PropVariant, WIA_IPA_FIRST );
        if( SUCCEEDED( hr ) )
        {
            IWiaDataTransfer *pWiaDataTransfer = NULL;
            hr = pWiaItem2->QueryInterface( IID_IWiaDataTransfer, (void**)&pWiaDataTransfer );
            if( SUCCEEDED( hr ) )
            {
                CWiaDataCallback *pCallback = new CWiaDataCallback;
                if( pCallback )
                {
                    IWiaDataCallback *pWiaDataCallback = NULL;
                    hr = pCallback->QueryInterface( IID_IWiaDataCallback, (void**)&pWiaDataCallback );
                    if( SUCCEEDED( hr ) )
                    {
                        STGMEDIUM stgMedium = {0};
                        stgMedium.tymed = TYMED_FILE;
                        hr = pWiaDataTransfer->idtGetData( &stgMedium, pWiaDataCallback );
                        ...

其中pWiaItem 是“根”项,pWiaItem2 是“顶部”项。

有人知道这里发生了什么吗?

【问题讨论】:

    标签: c++ wia


    【解决方案1】:

    解决方法是在本地上下文中再次枚举'root'WiaItem的项目。我在 init 方法中执行此操作并将指针存储到“顶部”,不知何故,它似​​乎变得无效,而 HRESULT 没有反映这一点。在我更改了代码之后,“顶部”WiaItem 在我使用它之前就被识别出来了,一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2012-02-07
      • 2016-05-08
      • 2011-09-01
      相关资源
      最近更新 更多