MFC读取图像并显示

oid CddrwDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    //添加代码
    // TODO: 在此添加控件通知处理程序代码
        //打开文件 
        CString filter = (CString)"图像文件(*.bmp)|*.bmp;*.BMP||";//指明可供选择的文件类型和相应的扩展名
    CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter, NULL);  //打开文件

                                                                                              //按下确定按钮 dlg.DoModal() 函数显示对话框
    if (dlg.DoModal() == IDOK)
    {
        //打开对话框获取图像信息
        CString BmpName = dlg.GetPathName();     //获取文件路径名   
        CString EntName = dlg.GetFileExt();      //获取文件扩展名
        EntName.MakeLower();                     //将文件扩展名转换为一个小写字符

        if (EntName.Compare(_T("bmp")) == 0)  //如果是bmp图片则打开显示
        {
            //定义变量存储图片信息
            BITMAPINFO *pBmpInfo;       //记录图像信息头内容
            BYTE *pBmpData;             //图像数据
            BITMAPFILEHEADER bmpHeader; //文件头
            BITMAPINFOHEADER bmpInfo;   //信息头
            CFile bmpFile;              //记录打开文件

                                        //以只读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据
            if (!bmpFile.Open(BmpName, CFile::modeRead | CFile::typeBinary))
                return;
            if (bmpFile.Read(&bmpHeader, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
                return;
            if (bmpFile.Read(&bmpInfo, sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
                return;
            pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
            //为图像数据申请空间
            memcpy(pBmpInfo, &bmpInfo, sizeof(BITMAPINFOHEADER));  //存储图像信息头内容
            DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;//图像数据大小,单位为字节
            pBmpData = (BYTE*)new char[dataBytes];
            bmpFile.Read(pBmpData, dataBytes);  //存储图像数据
            bmpFile.Close();

            //显示图像  STATIC_picture
            //CStatic *pwnd = (CStatic*)GetDlgItem(IDC_STATIC);  //里面的参数是图片控件的ID

            CStatic *pwnd = (CStatic*)GetDlgItem(IDC_STATIC_picture);                                   //pwnd->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
            pwnd->ModifyStyle(0xf, SS_BITMAP);
            pwnd->SetBitmap((HBITMAP)::LoadImage(GetModuleHandle(NULL), BmpName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));//打开图片


        }
    }
    

    
}

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页