0

步骤1:

                Image* image = NULL;
                image = Bitmap::FromFile(m_lpwFPSImagePath[i], TRUE);

                DDSURFACEDESC2    ddsd;
                DDCOLORKEY          ddck;
                ZeroMemory( &ddsd, sizeof( ddsd ) );
                ddsd.dwSize = sizeof( ddsd );
                ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
                ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
                ddsd.dwWidth  = image->GetWidth();;
                ddsd.dwHeight = image->GetHeight();
                hr = m_pDevice->CreateSurface(&ddsd, &m_pFPSTexture, NULL );
                if( hr != DD_OK )
                {
                    if(hr == DDERR_OUTOFVIDEOMEMORY)
                    {
                        ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN |
                            DDSCAPS_SYSTEMMEMORY;
                        hr = m_pDevice->CreateSurface(&ddsd, &m_pFPSTexture, NULL );
                    }
                }

第2步:

矩形 SrcRect={0,0,fTexWidth,fTexHeight}; 矩形 DstRect = {0,0,60,20};

    hr = m_pPrimarySurf->Blt(&DstRect,
        m_pFPSTexture,&SrcRect,DDBLT_WAIT,NULL);

注意:图像尺寸为:3170 x 64

m_pPrimarySurf->Blt(...) 返回 E_INVALIDARG 。所以为什么 ?谢谢 !

4

1 回答 1

0

也发生在我身上。我通过更改驱动程序类型来修复它。当我创建 DirectDraw 对象时,我指定应该使用仅软件渲染。LPDIRECTDRAW dd; HRESULT const dd_created = DirectDrawCreate(reinterpret_cast<GUID*>(DDCREATE_EMULATIONONLY), &dd, nullptr);如MSDN 上的DirectDrawCreate 函数文档中所述。我在带有 Intel® UHD Graphics 620 (WHL GT2) 图形的联想笔记本电脑上的 Ubuntu x64 18.04.5 LTS 内的 VirtualBox 5.2.42_Ubuntu r137960 内的 Windows 10 x64 版本 10.0.18363.1082 上运行 x86 应用程序。

于 2020-10-04T23:24:57.600 回答