用d3d9合并jpeg

    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值