VC实现打开BMP_JPG或GIF图片VCMFC打开图片
1、新建一个单文档的应用程序,项目名称为ShowBitmap
2、为CShowBitmapView类添加下述成员变量和成员函数:
//参数定义
public:
    int state;    //位图显示状态
    CString BmpName;   //保存图像文件文件名
    CString extname;    //保存图像文件扩展名
    CBitmap m_bitmap; //创建位图对象
    void ShowBitmap(CString BmpName);    //用来显示指定位图的函数
    BOOL ShowJpgGif(CDC* pDC,CString strPath, int x, int y);
3、在CShowBitmap类的构造函数中,初始化成员变量state
// CShowBitmapView 构造/析构

CShowBitmapView::CShowBitmapView()
{
    state=0;
}
4、为ID_FILE_OPEN消息添加响应函数(具体怎么加就不细说了),编写该函数
// CShowBitmapView 消息处理程序

void CShowBitmapView::OnFileOpen()
{
    //CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP;*.jpg)|*.BMP;*.jpg|"));  //这行代码可以打开BMP格式的图片
    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP)|*.BMP|jpg文件(*.jpg)|*.jpg||")); //这行代码可以打开BMPJPG格式的图片
//gif格式图片的打开在这就不列出来了,留给各位自己尝试吧,对于gif格式图片的显示图片函数和jpg格式图片是同一个函数。
     if (IDOK==dlg.DoModal())
     {
         state=0; 
         BmpName.Format(_T("%s"),dlg.GetPathName());
         extname = dlg.GetFileExt();            //返回选定文件的扩展文件名
        新的一天新的开始 extname.MakeLower();
         if (0==extname.Compare(_T("bmp")))
         {
             ShowBitmap(BmpName);
         }
         else
         {
             state=1;
         }
        Invalidate();
     }
}
5、编写BMP图片显示函数
void CShowBitmapView::ShowBitmap(CString BmpName)
{
    if (state==0)
    {           
        HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
        m_bitmap.Detach();
        m_bitmap.Attach(hBitmap);
        state=1;
        Invalidate();
    }
}
6、编写jpggif格式图片显示程序
BOOL CShowBitmapView::ShowJpgGif(CDC* pDC,CString strPath, int x, int y)

{
    IStream *pStm; 
    CFileStatus fstatus; 
    CFile file; 
    LONG cb; 

    //打开文件并检测文件的有效性
    if (file.Open(strPath,CFile::modeRead)&&
        file.GetStatus(strPath,fstatus)&& 
        ((cb =八大家 fstatus.m_size) != -1)) 
    { 
        HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
        LPVOID pvData = NULL; 
        if (hGlobal != NULL) 
        { 
            pvData = GlobalLock(hGlobal);
            if (pvData != NULL) 
            { 
                //file.ReadHuge(pvData, cb);  //6.0中可能是用这个函数
                file.Read(pvData, cb);  //VC2005.NET中用这个函数
                GlobalUnlock(hGlobal); 
                CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 
            } 
        } 
    }
    else
    {
        return false;
    } //打开文件结束



    //显示JPEGGIF格式的图片,GIF只能显示一帧,还不能显示动画,

    //要显示动画GIF请使用ACTIVE控件。

    IPicture *pPic; 


    //load image from file stream

    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

    { 

        OLE_XSIZE_HIMETRIC hmWidth; 
        OLE_YSIZE_HIMETRIC hmHeight; 
        pPic->get_Width(&hmWidth); 
        pPic->get_Height(&hmHeight); 
        double fX,fY; 

        //get image height and width


        fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0); 

        fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0); 

        //use render function display image
        if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
        {
            pPic->Release();
            return false;
        }
        pPic->Release(); 
    } 
    else 
    {
        return false
    }

    return true;
花的开放时间}
7、修改OnDraw函数,实现图片的显示
// CShowBitmapView 绘制

void CShowBitmapView::OnDraw(CDC* pDC)
{
    CShowBitmapDoc*六一节快乐 pDoc王一楠高鑫女儿 = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    if (state==1)
    {
        if (0 == extname.Compare(_T("bmp")))
        {
            CDC dcImage;
            if (!dcImage.CreateCompatibleDC(pDC))
            {
                return;
            }拍一拍在哪里改设置
            BITMAP bm;
            m_bitmap.GetBitmap(&bm);
            dcImage.SelectObject(&m_bitmap);
            pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
        }
        else
        {
            if (0 == extname.Compare(_T("jpg")))
            {
                ShowJpgGif(pDC,BmpName,1,1);
            }
        }
    }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。