如何将 剪贴板中的位图,自动转化为指定名称的bmp图,保存在硬盘.

解决方案 »

  1.   

    给你一个类,你看看吧!
    你的mail?
      

  2.   

    着这一个抓屏的类,有写到内存和clip以及文件的函数。
      

  3.   

    就是一个取得CB DC以及写DC到BMP文件的问题嘛!
    我来贴。
      

  4.   


    BOOL CBMPFmt::SaveAs(HDC hDC,LPRECT pRect, LPTSTR pcszPath)
    {
    if(!hDC)return FALSE;
    if(!IsExtension(pcszPath,_T(".bmp")))
    _tcscat(pcszPath,_T(".bmp"));
    CRect rect;
    if(pRect&&!IsRectEmpty(pRect))
    rect.CopyRect(pRect);
    else
    return FALSE;

    BITMAPINFOHEADER bmpi;
    ZeroMemory(&bmpi,sizeof(BITMAPINFOHEADER));
    bmpi.biHeight=rect.Height();
    bmpi.biWidth=rect.Width();
    bmpi.biBitCount=24;
    bmpi.biCompression=BI_RGB;
    bmpi.biSize=sizeof(bmpi);
    bmpi.biPlanes=1;

    DWORD* pBits=NULL;
    HBITMAP hBmp=CreateDIBSection(hDC,(CONST BITMAPINFO*)&bmpi,DIB_RGB_COLORS,
    (LPVOID*)&pBits,NULL,0);
    if(!hBmp)
    return FALSE; HDC hTmpDC=::CreateCompatibleDC(NULL);
    HGDIOBJ hOldObj=SelectObject(hTmpDC,hBmp);
    BitBlt(hTmpDC,0,0,bmpi.biWidth,bmpi.biHeight,hDC,rect.left,rect.top,
    SRCCOPY);

    BITMAPFILEHEADER bmpfh;
    ZeroMemory(&bmpfh,sizeof(BITMAPFILEHEADER));
    bmpfh.bfType=0x4D42;
    bmpfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
    bmpfh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); BOOL bRet=TRUE;
    CFile f;
    if(!f.Open(pcszPath,CFile::modeCreate|CFile::modeReadWrite)){
    bRet=FALSE;
    goto done;
    }
    f.Write(&bmpfh,sizeof(BITMAPFILEHEADER));
    f.Write(&bmpi,sizeof(BITMAPINFOHEADER));
    //Caution bits size!
    f.WriteHuge(pBits,((bmpi.biWidth*24+31)/32)*4*bmpi.biHeight);
    f.Close();
    done:
    SelectObject(hTmpDC,hOldObj);
    DeleteObject(hBmp);
    DeleteDC(hTmpDC);
    return bRet;
    }
      

  5.   


    BOOL CChildView::PasteImageFromClipboard()
    {
    if(!OpenClipboard())
    return FALSE;
    if(!IsClipboardFormatAvailable(CF_BITMAP))
    return FALSE;
    HBITMAP hBmp=(HBITMAP)GetClipboardData(CF_BITMAP);
    HDC dc=::CreateCompatibleDC(NULL);
    HGDIOBJ hOldObj=SelectObject(dc,hBmp);
    m_RenderEngine.LoadFromDC(dc);
    SelectObject(dc,hOldObj);
    SAFE_DELETEDC(dc);
    CloseClipboard(); m_RenderEngine.GetPicSize(m_sWidth,m_sHeight);
    SetZoom(1); m_PicData.m_lPicTop=0;
    m_PicData.m_lPicLeft=0;
    SendMessage(WM_PAINT);
    return TRUE;
    }