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);
用d3d9合并jpeg
最新推荐文章于 2019-07-31 10:50:13 发布