rt

解决方案 »

  1.   

    CString   StrFilter="位图文件(*.bmp)|*.bmp|所有文件(*.*)|*.*||";
    CFileDialog  Dlg(TRUE,NULL,NULL,NULL,StrFilter,this);
    if(!Dlg.DoModal()==IDOK)
    return ;
    CString StrFileName;
    StrFileName=Dlg.GetPathName();
    //BITMAPINFO结构指针
    BITMAPINFO* pBmpInfo;
    //DIB图像数据指针
    BYTE* pBmpData;
    CFile MyFile;
    if(!MyFile.Open(StrFileName,CFile::modeRead|CFile::typeBinary))
    return ;
    BITMAPFILEHEADER BmpHeader;
    if(MyFile.Read(&BmpHeader,sizeof(BmpHeader))!=sizeof(BmpHeader))
    {
    AfxMessageBox("读位图文件头出现错误!");
    return ;
    }
    if(BmpHeader.bfType!=0x4d42)
    {
    AfxMessageBox("不是位图文件!");
    return ;
    }
    BITMAPINFOHEADER BmpInfo;
    if(MyFile.Read(&BmpInfo,sizeof(BmpInfo))!=sizeof(BmpInfo))
    {
    AfxMessageBox("读取位图信息出现错误!");
    return ;
    }
    if(BmpInfo.biBitCount!=24)
    {
    AfxMessageBox("不是真24色位图,程序暂不支持!");
    return ;
    }
    pBmpInfo=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)];
    if(!pBmpInfo)
    {
    AfxMessageBox("内存分配错误!");
    return ;
    }
    memcpy(pBmpInfo,&BmpInfo,sizeof(BITMAPINFOHEADER));
    DWORD dataBytes=BmpHeader.bfSize-BmpHeader.bfOffBits;
    pBmpData=(BYTE*)new char[dataBytes];
    if(!pBmpData)
    {
    AfxMessageBox("内存分配错误!");
    delete pBmpInfo;
    return ;
    }
    if(MyFile.Read(pBmpData,dataBytes)!=dataBytes)
    {
    AfxMessageBox("读位图数据错误!");
    delete pBmpInfo;
    delete pBmpData;
    return ;
    }
    MyFile.Close();
    CClientDC *pDC=new CClientDC(this);
    pDC->SetStretchBltMode(COLORONCOLOR);
    StretchDIBits(pDC->GetSafeHdc(),0,0,BmpInfo.biWidth,BmpInfo.biHeight,0,0,
    BmpInfo.biWidth,BmpInfo.biHeight,
            pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
      

  2.   

    加载 -〉 bitblt 到指定位置