用d3d9合并jpeg

来源:互联网 发布:哈曼卡顿和惠威 知乎 编辑:程序博客网 时间:2024/05/23 01:26
    CComPtr<IDirect3D9> pD3D = Direct3DCreate9 ( D3D_SDK_VERSION ) ;    if ( pD3D == NULL )    {        return NSST_ERROR_DEFAULT;    }    OUTPUT_DEBUG("NSSTCommonCombineJPEG start");    D3DXIMAGE_INFO SrcInfo1;    D3DXIMAGE_INFO SrcInfo2;    D3DXGetImageInfoFromFile(base::SysUTF8ToWide(pic_base).c_str(),&SrcInfo1);    D3DXGetImageInfoFromFile(base::SysUTF8ToWide(pic_add).c_str(),&SrcInfo2);    D3DPRESENT_PARAMETERS present_params;    ZeroMemory ( &present_params, sizeof(present_params) ) ;    present_params.BackBufferFormat = D3DFMT_UNKNOWN ;    present_params.Windowed = TRUE ;    present_params.SwapEffect = D3DSWAPEFFECT_DISCARD ;    present_params.BackBufferCount = 1;      present_params.SwapEffect = D3DSWAPEFFECT_COPY;    present_params.BackBufferWidth = SrcInfo1.Width;    present_params.BackBufferHeight = SrcInfo1.Height;    D3DCAPS9 caps ;    DWORD BehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING ;    HRESULT hr = pD3D->GetDeviceCaps ( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ;    if ( SUCCEEDED(hr) )    {        if ( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )        {            BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING ;        }    }    CComPtr<IDirect3DDevice9> pDevice ;    hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, BehaviorFlags, &present_params, &pDevice ) ;    if (FAILED(hr))    {        return NSST_ERROR_DEFAULT;    }    CComPtr<IDirect3DTexture9> texture1;         if (FAILED(D3DXCreateTextureFromFileEx(pDevice,        base::SysUTF8ToWide(pic_base).c_str(),        D3DX_DEFAULT,        D3DX_DEFAULT,        D3DX_DEFAULT,        0,        D3DFMT_UNKNOWN,        D3DPOOL_MANAGED,        D3DX_FILTER_POINT,        D3DX_DEFAULT,         0,         NULL,         NULL,         &texture1)))      {        return NSST_SUCCESS;      }    CComPtr<IDirect3DTexture9> texture2;     if (FAILED(D3DXCreateTextureFromFileEx(pDevice,        base::SysUTF8ToWide(pic_add).c_str(),        D3DX_DEFAULT,        D3DX_DEFAULT,        D3DX_DEFAULT,        0,        D3DFMT_UNKNOWN,        D3DPOOL_MANAGED,        D3DX_FILTER_POINT,        D3DX_DEFAULT,         0,         NULL,         NULL,         &texture2)))      {        return NSST_SUCCESS;      }      pDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0 );      pDevice->BeginScene();    DrawTexture(pDevice,texture1,0,0,(float)SrcInfo1.Width,(float)SrcInfo1.Height,0xffffffff);    DrawTexture(pDevice,texture2,(float)pic2_rc->x,(float)pic2_rc->y,(float)pic2_rc->width,(float)pic2_rc->height,0xffffffff);    pDevice->EndScene();    CComPtr<IDirect3DSurface9> pBackBuffer;    pDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);    D3DXSaveSurfaceToFile(base::SysUTF8ToWide(pic_result).c_str(),D3DXIFF_JPG,pBackBuffer,NULL,NULL);


0 0
原创粉丝点击