有谁能给我一个不用MFC显示BMP文件的例子。从打开文件开始,读BITMAPFILEHEADER、 BITMAPINFOHEADER结构,读颜色信息,再用SetDIBitsToDevice或StretchDIBits显示。我都要被这两个函数弄疯了。

解决方案 »

  1.   

    void CMyView::OnDraw(CDC* pDC)
    {
    CMyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    if(head != NULL && block != NULL) 
    ::SetDIBitsToDevice(pDC->m_hDC,0,0,head->bmiHeader.biWidth,head->bmiHeader.biHeight,0,0,0,head->bmiHeader.biHeight,block,head,DIB_RGB_COLORS);
     
    }void CMyView::OnFileOpen() 
    {
    // TODO: Add your command handler code here
    CFileDialog mydialog(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
    "BMP文件(*.bmp)|*.bmp|JPEG文件(*.jpg)|*.jpg|所有文件(*.*)|*.*||",NULL);
    if(mydialog.DoModal()==IDOK)
    {
     
    name=mydialog.GetPathName();

    CFile myfile;
    myfile.Open(name,CFile::modeRead);
    myfile.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
    head=(BITMAPINFO*) new char[sizeof(BITMAPINFOHEADER)];
    myfile.Read(head,sizeof(BITMAPINFOHEADER));
    size=myfile.GetLength()-sizeof(BITMAPINFOHEADER)-sizeof(BITMAPFILEHEADER);
    block=(BYTE*)new char[size];
    myfile.Read(block,size);
    myrect.SetRect(0,0,head->bmiHeader.biWidth,head->bmiHeader.biHeight); myfile.Close();
    Invalidate();
    }
    }
    自己加上  成员变量