这种情况下怎样绘制位图图像呢??????在线等,谢谢

laohubinbin 2005-05-27 10:50:54
由于采用的是别人的代码
所以现在在绘制位图时遇到了麻烦

读取位图的代码如下:
CFile* m_pcf;//文件变量,用来对文件操作
CFileException m_e;//出错处理
BITMAPFILEHEADER m_bmfh;//BMP文件头变量
BITMAPINFOHEADER m_bmih;//BMP文件信息变量
RGBTRIPLE *m_prgb;//24位真彩色数据格式

CFileDialog fileDialog( TRUE,"*.ICO",NULL,NULL,"文件(*.bmp)|*.bmp;|");
m_pcf->Open(fileDialog.GetPathName(),CFile::modeRead, &m_e/*NULL*/);
m_pcf->SeekToBegin();
m_pcf->Read(&m_bmfh,sizeof(m_bmfh));//读取文件头
m_pcf->Read(&m_bmih,sizeof(m_bmih));//读取文件信息头
TRACE("\n%d\n",m_bmih.biSizeImage);
m_prgb = new RGBTRIPLE[m_bmih.biWidth*m_bmih.biHeight];
m_pcf->SeekToBegin();
m_pcf->Seek(54,CFile::begin);

if (m_pcf->GetLength()>64*1024)
{
m_pcf->ReadHuge(m_prgb,m_bmih.biWidth*m_bmih.biHeight*3);
}
else
{
m_pcf->Read(m_prgb,m_bmih.biWidth*m_bmih.biHeight);
}

m_pcf->Close();//关闭文件

程序采用的是文档视图结构
然后怎样处理才能绘制出位图图像呢(由于对处理速度有要求,不打算采用“打点绘图”的方法)

我的想法是:
能否利用解析位图过程中所得到的数据
BITMAPFILEHEADER m_bmfh;//BMP文件头变量
BITMAPINFOHEADER m_bmih;//BMP文件信息变量
RGBTRIPLE *m_prgb;//24位真彩色数据格式
来对位图进行显示呢?

谢谢
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
laohubinbin 2005-05-27
  • 打赏
  • 举报
回复
to:lovegigi0217(DemonHunter)

是的
读取时确实有时会出现问题
应该怎样解决呢?

是的
您列出的方法可以
但是不光是要作显示
还要对位图中图像部分的数据进行计算和处理
所以必须解析位图文件
因此就有了我前面列出的代码
我的想法是:
能否利用解析位图过程中所得到的数据
BITMAPFILEHEADER m_bmfh;//BMP文件头变量
BITMAPINFOHEADER m_bmih;//BMP文件信息变量
RGBTRIPLE *m_prgb;//24位真彩色数据格式
来对位图进行显示呢?
lovegigi0217 2005-05-27
  • 打赏
  • 举报
回复
m_bmih.biWidth指的是图像实际的宽度,并不是文件的宽度.在BMP文件中,每行都必需是4的整数倍,即每行都可能比m_bmih.biWidth要大一点.m_prgb = new RGBTRIPLE[m_bmih.biWidth*m_bmih.biHeight];m_pcf->ReadHuge(m_prgb,m_bmih.biWidth*m_bmih.biHeight*3);我比较怀疑你这样是否能正确的读出来.
如果只需要显示出来,不需要对点进行操作,可以这样:
CClientDC dc(this);
CDC Mem_dc;
CBitmap *bitmap=new CBitmap;
HBITMAP hbmp;
hbmp=(HBITMAP)::LoadImage(0,"c:\\demo.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bitmap->Attach(hbmp);
Mem_dc.CreateCompatibleDC(&dc);
Mem_dc.SelectObject(bitmap);
dc.BitBlt(0,0,width,height,&Mem_dc,0,0,SRCCOPY);
huwei001982 2005-05-27
  • 打赏
  • 举报
回复
读出来的数据用

int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);
来绘出
laohubinbin 2005-05-27
  • 打赏
  • 举报
回复
继续求教
谢谢

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧