请教DIRECT3D渲染灰度图问题

haha7894561230123 2017-04-25 11:28:53
用的SURFACE 4通道的图片渲染成功,单通道的灰度图不知道怎么弄了
上图为初始化代码,图里注释的那句话是我的测试结果

下面上渲染的代码
int direct3d_rend::draw_image(int x, int y, int width, int height, const void* p_buf, const int i_len)
{
HRESULT lRet;
if (p_buf==NULL)
{
return -1;
}
if (m_pDirect3DSurfaceRender == NULL)
return -1;
D3DLOCKED_RECT d3d_rect;
lRet = m_pDirect3DSurfaceRender->LockRect(&d3d_rect, NULL, D3DLOCK_DONOTWAIT);
if (FAILED(lRet))
return -1;

// for (int i = 0; i < height; ++i)
// {
// std::reverse((byte *)p_buf + i * width*3, (byte *)p_buf + i * width*3 + width*3);
// }
// for (int i = 0; i < width;i++)
// {
// std::reverse((byte *)p_buf + i * height*3, (byte *)p_buf + i * height*3 + height*3);
// }

std::reverse((byte *)p_buf, (byte *)p_buf + width*height);

byte *pSrc = (byte *)p_buf;

//unsigned long* pDest = reinterpret_cast<unsigned long*>(d3d_rect.pBits);
byte * pDest = (BYTE *)d3d_rect.pBits;
int stride = d3d_rect.Pitch;
unsigned long i = 0;
//通过测试 D3DFMT_X8R8G8B8为BGRA方式其中A无效
// int pixel_w_size = width;
// int isize = width * height;
// for (int i = 0; i != isize; ++i)
// {
// byte* pbyte = reinterpret_cast<byte*>(&pDest[i]);
// pbyte[0] = 0; // 这个可能是A
// pbyte[1] = 0; // 这个可能是R
// pbyte[2] = 0;
// pbyte[3] = 0xff;
// }

memcpy(pDest, p_buf, width * height);

// int pixel_w_size = width*3;
// for (i = 0; i < height; i++){
// memcpy(pDest, pSrc, pixel_w_size);
// pDest += stride;
// pSrc += pixel_w_size;
// }

lRet = m_pDirect3DSurfaceRender->UnlockRect();
if (FAILED(lRet))
return -1;

if (m_pDirect3DDevice == NULL)
return -1;

m_pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
m_pDirect3DDevice->BeginScene();
IDirect3DSurface9 * pBackBuffer = NULL;

m_pDirect3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);
m_pDirect3DDevice->StretchRect(m_pDirect3DSurfaceRender, NULL, pBackBuffer, &m_rtViewport, D3DTEXF_LINEAR);

m_pDirect3DDevice->EndScene();
m_pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
pBackBuffer->Release();
return lRet;
}
...全文
772 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧