我刚刚接触到vtk这方面的知识,还是个新手
   我想请教高手,vtk中有个mpr功能,我看了很多别人发部的帖子,他处理完图片后,使用的是vtk自己的绘画窗口,显示的图像效果,我想请问下能不能用dc 把这些对象图像给画出来   如果是分数不够的话我可以开贴加分

解决方案 »

  1.   

    VTK是OpenGL的衍生把,你要呈现的图标,可以用窗体截图的。
    void CMapXViewView::SaveHwndToBmpFile(HWND hWnd, LPCTSTR lpszPath)
    {
    HDC hDC = ::GetWindowDC(hWnd); //直接获取窗体句柄
    ASSERT(hDC); HDC hMemDC = ::CreateCompatibleDC(hDC);
    ASSERT(hMemDC); RECT rc;
    ::GetWindowRect(hWnd, &rc); HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, rc.right - rc.left -5, rc.bottom - rc.top-5);
    ASSERT(hBitmap); HBITMAP hOldBmp = (HBITMAP)::SelectObject(hMemDC, hBitmap);
    ::PrintWindow(hWnd, hMemDC, PW_CLIENTONLY); //拷贝句柄进入内存句柄,保留你VTK的图像
    //::StretchBlt() BITMAP bitmap = {0};
    ::GetObject(hBitmap, sizeof(BITMAP), &bitmap);
    BITMAPINFOHEADER bi = {0};
    BITMAPFILEHEADER bf = {0}; CONST int nBitCount = 24;
    bi.biSize = sizeof(BITMAPINFOHEADER);
    bi.biWidth = bitmap.bmWidth;
    bi.biHeight = bitmap.bmHeight;
    bi.biPlanes = 1;
    bi.biBitCount = nBitCount;
    bi.biCompression = BI_RGB;
    DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight; HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER));
    LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
    *lpbi = bi; ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS); try
    {
    CFile file;
    file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite);
    bf.bfType = 0x4d42;
    dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    bf.bfSize = dwSize;
    bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER));
    file.Write((BYTE*)lpbi, dwSize);
    file.Close();
    }
    catch(CFileException* e)
    {
    e->ReportError();
    e->Delete();
    } GlobalUnlock(hDib);
    GlobalFree(hDib); ::SelectObject(hMemDC, hOldBmp);
    ::DeleteObject(hBitmap);
    ::DeleteObject(hMemDC);
    ::ReleaseDC(hWnd, hDC);
    }
    如果这还不行,只能直接获取::GetDesktopWindow()来获取窗体句柄来截图呈现。
    PS:由于GDI和GDI+和OpenGL,D3D实现机制有很大差异,可能这个方法不一定能行。视频直接通过截图是获取不到得。不知道PrintWindow是否做了相关措施没。可以尝试下
      

  2.   

      我是想获取mpr 他的切面数据在用dc画到自定的区域
      不知道这样行不行