在vc++6.0怎样显示一bmp文件?

zgz2000 2000-06-01 02:43:00
我想在CView中指定位置显示一个已存在的bmp file.
...全文
1141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgz2000 2000-06-01
  • 打赏
  • 举报
回复
谢谢各位!不过我这又一个源码,好像很繁,请高手帮我看看是怎么回事。
LPVOID m_lpvColorTable = NULL;
LPBYTE m_lpImage = NULL;
LPBITMAPINFOHEADER m_lpBMIH = NULL;
int m_nColorTableEntries = 0;

HANDLE m_hFile = NULL;
HANDLE m_hMap = NULL;
LPVOID m_lpvFile = NULL;
CString rFileName;
rFileName.LoadString( IDS_FILENAME );

/m_hFile = ::CreateFile(rFileName, GENERIC_WRITE and GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
m_hMap = ::CreateFileMapping(m_hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
m_lpvFile = ::MapViewOfFile(m_hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file

LPVOID lpvMem = (LPBYTE)m_lpvFile + sizeof(BITMAPFILEHEADER);
m_lpBMIH = (LPBITMAPINFOHEADER)lpvMem;
m_lpvColorTable = (LPBYTE)m_lpBMIH + sizeof(BITMAPINFOHEADER);
m_nColorTableEntries = m_lpBMIH->biClrUsed;

// address of the bitmap image
m_lpImage = (LPBYTE)m_lpvColorTable + sizeof(RGBQUAD) * m_nColorTableEntries;
xielm 2000-06-01
  • 打赏
  • 举报
回复
請用LoadImage函數裝載文件,其他的同上述各位朋友即可。
shihuaisen 2000-06-01
  • 打赏
  • 举报
回复
CClientDC clientDC(this);
CClientDC *pDC=(CClientDC *)&clientDC;
BITMAP bmp;
CBitmap bitmap;
CRect rect;
GetClientRect(rect);
bitmap.LoadBitmap("xxxx.bmp");
bitmap.CreateCompatibleBitmap(&bmp);
pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
可以指定位置。
evelan 2000-06-01
  • 打赏
  • 举报
回复
也可用Bitblt()函数

CDC MemDC;
BITMAP bm;
CBitmap Bitmap;
Bitmap.LoadBitmap("xxxx.bmp");
Bitmap.GetObject(sizeof(BITMAP),&bm);
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(&Bitmap);

pDC->BitBlt(point.x,point.y,bm.bmWidth,bm.bmHeight,&MemDC,
0,0,SRCCOPY);

MemDC.DeleteDC();
evelan 2000-06-01
  • 打赏
  • 举报
回复
首先创建CBitmap对象,再LoadBitmap(),然后利用DrawState()函数显示!
CBitmap bitmap;
bitmap.LoadBitmap("xxxx.bmp");
pDC->DrawState(pt,size,&bitmap,DST_BITMAP)
即可搞定.
VC++6.0车牌识别系统 需要注意的地方: 使用VC++6.0做开发工具, 采用简单的SDI框架结构 ,一次处理一幅位图(有兴趣的可以作成MDI) 1)位图信息的数据是从左下往右下为一行,一行一行往上排的。 2)每行像素应该是4的倍数,不足的地方用空点补齐,读的时候注意跳过冗余点。 3)主要数据都存在Doc里面,BMP的主要数据存在一个由ImgData指向的BYTE型的内存空间(根据位图的大小,动态分配的)。 4)数据读进来以后,注意向内存中贴图,以保证刷新的效率。 5)程序执行流程 应用程序生成--》打开--》CDipView的OnFileOpen 函数--》 调用CDipDoc的FileOpen 函数--》并使用myDoc->UpdateAllViews(NULL); 刷新 自动调用CDipView的OnPaint函数--》调用CDipView的OnDraw函数----一个像素点一个像素点的画 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 比较重要的地方 读BMP文件,只能打开256色 (可以是灰度) 显示和内存贴图技术 关于调色板: 调色板实际上是一个数组,4个BYTE 分别是 B,G,R,和 Reserved 每一个像素点都有一个相应的数组。 关于VC和windows 的绘图机制: 使用GDI(图形设备接口)对象,通常使用CDC 类,CPaintDC也一样(device-context)设备上下文 windows下的MFC编程机制,消息驱动,事件等待! 全局的app(应用程序对象) 注意 手工分配内存的清除 和CDC对象的删除 以释放系统的GDI资源 每一个new操作符都要对应一个delete 虽然已经弄出来了,还是希望大家好好读读源程序。 你们以后的工作: 在菜单中添加菜单项,通过ClassWizzard 生成消息响应函数(当然也可手动添加), 所有的操作应当是对 BYTE* ImgData;进行的。 在完成相应的功能后 将 isnewfile 和 isnewiamge 置为真 ,并使用myDoc->UpdateAllViews(NULL); 刷新 当然,可以更加有个性化一点,有能力的同学可以自己完成。 随着课程的进行,菜单功能逐渐丰富,最后完成基本的数字图像处理的功能,而不必最后一下完成一个大的作业。

16,467

社区成员

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

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

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