现在的位置: 首页 > 综合 > 正文

VC ++ 保存静态文本中图像或者ICON!

2014年02月18日 ⁄ 综合 ⁄ 共 1686字 ⁄ 字号 评论关闭

1.在static中显示的图片或者Icon进行保存成BMP图片。

CStatic m_StaBmp;

CDC* pDC = m_StaBmp.GetDC();   
    CBitmap bitmap;   
    CDC memDC ;   
    CRect rect;   
    m_StaBmp.GetClientRect(rect);   
    memDC.CreateCompatibleDC(pDC);   

    bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());   
    memDC.SelectObject(&bitmap);   
    memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY); 

    CFile file(_T("E:\\22.bmp"),CFile::modeCreate|CFile::modeWrite);   

    BITMAP bInfo;   
    bitmap.GetBitmap(&bInfo);   

    //计算调色板大小   
    int panelsize = 0;   
    if (bInfo.bmBitsPixel<24) //非真彩色   
    {   
        //panelsize = pow((double)2,bInfo.bmBitsPixel)*sizeof(RGBQUAD);   
    }   

    //定义位图信息   
    BITMAPINFO*  bMapInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);   
    bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel;   
    bMapInfo->bmiHeader.biClrImportant = 0;   
    bMapInfo->bmiHeader.biCompression = 0;   
    bMapInfo->bmiHeader.biHeight = bInfo.bmHeight;   
    bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes;   
    bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO);   
    bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes;   
    bMapInfo->bmiHeader.biWidth = bInfo.bmWidth;   
    bMapInfo->bmiHeader.biXPelsPerMeter = 0;   
    bMapInfo->bmiHeader.biYPelsPerMeter = 0;   

    //获取位图的实际数据   
    char* pData = new char[bMapInfo->bmiHeader.biSizeImage];   
    int len = GetDIBits(pDC->m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS);   

    BITMAPFILEHEADER bFileHeader;   
    bFileHeader.bfType = 0x4D42;   
    bFileHeader.bfReserved1 = 0;   
    bFileHeader.bfReserved2 = 0;   
    bFileHeader.bfSize = sizeof(BITMAPFILEHEADER);    
    bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize;   

    //向文件中写入位图数据   
    file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER));   
    file.Write(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHEADER));   
    file.Write(pData,bMapInfo->bmiHeader.biSizeImage+panelsize);   
    file.Close();   
    delete pData;   
    LocalFree(bMapInfo);
    bitmap.DeleteObject();

 

抱歉!评论已关闭.