DC绘图用数组就可轻松保存下来.
用OpenGL的RC绘的图呢,怎么保存

解决方案 »

  1.   

    用glreadpixels读入内存,然后写出影像。
      

  2.   

    请有OpenGL方面知识的加这个群吧17385054
    OpenGL方面的群应该还是不多的.
      

  3.   

    再问一下,在MFC的VIEW视窗里,为视窗设置背景,用的哪个函数呢.
      

  4.   

    opengl superbible里有关于将屏幕视图存成bmp格式图像的介绍。
      

  5.   

    BeginWaitCursor(); //get the client geometry
    CRect rect;
    GetClientRect(&rect);
    CSize size(rect.Width(), rect.Height());
    TRACE("client zone:(%d;%d)\n", size.cx, size.cy); size.cx -= size.cx % 4;
    TRACE("final client zone:(%d;%d)\n", size.cx, size.cy); //read the bitmap data and create a bitmap
    FILE* fp; int NbBytes = 3 * size.cx * size.cy;
    unsigned char* pPixelData = new unsigned char[NbBytes]; ::glReadPixels(0, 0, size.cx, size.cy, GL_BGR_EXT, GL_UNSIGNED_BYTE, pPixelData); BITMAPINFOHEADER header;
    header.biWidth = size.cx;
    header.biHeight = size.cy;
    header.biSizeImage = NbBytes;
    header.biSize = 40;
    header.biPlanes = 1;
    header.biBitCount = 3 * 8;
    header.biCompression = 0;
    header.biXPelsPerMeter = 0;
    header.biYPelsPerMeter = 0;
    header.biClrUsed = 0;
    header.biClrImportant = 0; BITMAPFILEHEADER fileheader;
    fileheader.bfType = 'MB';
    fileheader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + NbBytes;
    fileheader.bfReserved1 = 0;
    fileheader.bfReserved2 = 0;
    fileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); CString strFilter = "bmp files(*.bmp)|*.bmp|all files(*.*)|*.*||";
    CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter, NULL);
    CString strPath;

    if (dlg.DoModal() == IDOK)
    {
    strPath = dlg.GetPathName(); ASSERT(strPath);
    strPath = strPath + ".bmp";
    if ((fp = fopen(strPath, "wb")) == NULL)
    {
    MessageBox("can't open the file!", "error", MB_OK);
    return;
    } if (fwrite(&fileheader, 1, sizeof(BITMAPFILEHEADER), fp) < sizeof(BITMAPFILEHEADER))
    {
    MessageBox("couldn't write the file header!", "error", MB_OK);
    fclose(fp);
    return;
    } if (fwrite(&header, 1, sizeof(BITMAPINFOHEADER), fp) < sizeof(BITMAPINFOHEADER))
    {
    MessageBox("couldn't write the bitmap header!", "error", MB_OK);
    fclose(fp);
    return;
    } if (fwrite(pPixelData, 1, NbBytes, fp) < NbBytes)
    {
    MessageBox("couldn't write the bitmap bits!", "error", MB_OK);
    fclose(fp);
    return;
    }
    fclose(fp);
    }

    delete []pPixelData; EndWaitCursor();