首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WIA获取图像/扫描

使用WIA获取图像/扫描
EN

Stack Overflow用户
提问于 2012-08-24 14:24:09
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
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是“顶”项。

有谁知道这是怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-24 16:31:49

解决方案是再次枚举本地上下文中的“根”WiaItem的项。我在init方法中这样做了,并存储了指向“top”的指针,不知何故,它似乎被无效了,而HRESULT没有反映这一点。在我更改了代码,以便在我使用它之前识别“顶级”WiaItem之后,一切都进行得很顺利。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12104157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档