VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 753|回复: 3

如何通过读取位图文件显示位图?(不是登陆)

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-29 13:20:01 | 显示全部楼层 |阅读模式
rt
回复

使用道具 举报

0

主题

20

帖子

21.00

积分

新手上路

Rank: 1

积分
21.00
发表于 2020-3-2 04:00:01 | 显示全部楼层
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);
回复

使用道具 举报

0

主题

12

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-3-2 10:15:01 | 显示全部楼层
加载 -〉 bitblt 到指定位置
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-3-2 13:00:02 | 显示全部楼层
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表