有什么简单的办法,请给一点源码。谢谢

解决方案 »

  1.   

    GetDIBits();
    设置相应的BITMAPFILEHEADER等,然后写文件.
      

  2.   

    大家帮我看下程序,为何截的图不能在资源管理器中预览缩略图?CRect rect;
    GetDlgItem(IDC_Draw)->GetWindowRect(rect);
    (GetDlgItem(IDC_Draw)->GetParent())->ScreenToClient(rect); CWindowDC dc(GetDlgItem(IDC_Draw)); BITMAPINFO bi;
    void *pBits=NULL;
    int  nWidth=rect.right;
    int  nHeight=rect.bottom;
    ZeroMemory(&bi,sizeof(bi));
    bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
    bi.bmiHeader.biHeight=nHeight;
    bi.bmiHeader.biWidth=nWidth;
    bi.bmiHeader.biPlanes=1;
    bi.bmiHeader.biBitCount=24;
    bi.bmiHeader.biCompression=BI_RGB;
    bi.bmiHeader.biSizeImage=3*nWidth*nHeight;
    HDC hDesktopCompatibleDC=::GetDC(GetDlgItem(IDC_Draw)->GetSafeHwnd());
    HDC hBmpFileDC=CreateCompatibleDC(hDesktopCompatibleDC);
    HBITMAP hBmpFileBitmap=CreateDIBSection(hDesktopCompatibleDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
    SelectObject(hBmpFileDC,hBmpFileBitmap);
    BitBlt(hBmpFileDC,0,0,nWidth,nHeight,hDesktopCompatibleDC,0,0,SRCCOPY);                HANDLE hFile=CreateFile("test.bmp",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    if(hFile!=INVALID_HANDLE_VALUE)
    {
    DWORD dwRet=0;
    BITMAPFILEHEADER bmfHeader;
    ZeroMemory(&bmfHeader,sizeof(bmfHeader));
    bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
    bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits;
    bmfHeader.bfType='MB'; WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL);
    WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL);
    WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL);
    CloseHandle(hFile);
    } DeleteDC(hBmpFileDC);
    DeleteObject(hBmpFileBitmap);
      

  3.   

    BMP文件的每一行是要求32BIT行对齐的,即如果一行的像素数据是787字节,必须补零延长到788字节。(788/4 = 197)你的程序好象没做这个工作。另外pBits好象要先申请内存才能用。
      

  4.   

    WAHAT ARE YOU SAY ,I DO NOT KNOWN!!!!!!!!