Image 在MFC中渲染大型图像
我试图在MFC中渲染CView中的大型图像(10K x 10K)。GdiPlus的性能非常慢(精确地说是0.5 fps)。是否有任何免费或商业图书馆可供我使用 DirectX渲染代码Image 在MFC中渲染大型图像,image,winapi,mfc,Image,Winapi,Mfc,我试图在MFC中渲染CView中的大型图像(10K x 10K)。GdiPlus的性能非常慢(精确地说是0.5 fps)。是否有任何免费或商业图书馆可供我使用 DirectX渲染代码 float halfWidth = m_CurWidth/2.0; float halfHeight = m_CurHeight/2.0; D3DXMATRIX P; D3DXMatrixOrthoLH(&P, (float)rect.Width(), (float)rect.Height(), -10,
float halfWidth = m_CurWidth/2.0;
float halfHeight = m_CurHeight/2.0;
D3DXMATRIX P;
D3DXMatrixOrthoLH(&P, (float)rect.Width(), (float)rect.Height(), -10, 10);
m_pDevice3D->SetTransform(D3DTS_PROJECTION, &P);
float cornerX = m_Left;
float cornerY = -m_Top;
VERTEX g_vVertices[4];
{
g_vVertices[0] = VERTEX(cornerX + (-1.0f * halfWidth), cornerY + (1.0f * halfHeight), 0.0f, 0.0f, 0.0f );
g_vVertices[1] = VERTEX(cornerX + (1.0f * halfWidth), cornerY + (1.0f * halfHeight), 0.0f, 1.0f, 0.0f );
g_vVertices[2] = VERTEX(cornerX + (-1.0f * halfWidth), cornerY + (-1.0f * halfHeight), 0.0f, 0.0f, 1.0f );
g_vVertices[3] = VERTEX(cornerX + (1.0f * halfWidth), cornerY + (-1.0f * halfHeight), 0.0f, 1.0f, 1.0f );
};
void * pVertices;
m_pVB->Lock( 0, sizeof(pVertices), (void**)&pVertices, 0 );
memcpy( pVertices, g_vVertices, sizeof(g_vVertices));
m_pVB->Unlock();
if(m_pDevice3D){
m_pDevice3D->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
0xffffffff, 1.0f, 0);
m_pDevice3D->BeginScene();
m_pDevice3D->SetFVF(D3DFVF_VERTEX);
m_pDevice3D->SetStreamSource(0, m_pVB, 0, sizeof(VERTEX));
// Draw primitives using presently enabled texture.
m_pDevice3D->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
m_pDevice3D->EndScene();
m_pDevice3D->Present(0, 0, 0, 0);
}
是否需要一次渲染所有像素?您可以改用滚动视图,只渲染滚动区域内的部分。然而,您是对的,GDIPlus速度很慢。你可以直接使用GDI的BitBlt,我实际上也需要允许图像的放大/缩小,所以渲染片段不是一个选项。我也尝试过用Direct3D渲染,但是质量太差了!我懂了。您可以使用StretchBlt进行缩放,但不会太快。可以显示DirectX代码吗?可以添加m_pDevice3D->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);和m_pDevice3D->SetSamplerState(0,D3DSAMP_磁滤波器,D3DTEXF_线性);看看质量是否有改进。还可以使用纹理坐标0从每个角点减去0.5f,如下所示:cornerX+(-1.0f*半宽度)-0.5f;将0.5f添加到纹理坐标为1的角点,如下所示:角点+(-1.0f*半高)+0.5f这就是所谓的半像素偏移:;