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:

RECT SrcRect={0,0,fTexWidth,fTexHeight}; RECT 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 オブジェクトを作成したときに、ソフトウェアのみのレンダリングを使用するように指定しました。MSDNのDirectDrawCreate 関数LPDIRECTDRAW dd; HRESULT const dd_created = DirectDrawCreate(reinterpret_cast<GUID*>(DDCREATE_EMULATIONONLY), &dd, nullptr);のドキュメントに記載されているとおりです。Intel® UHD Graphics 620 (WHL GT2) グラフィックスを搭載した Lenovo ラップトップの 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 に答える