您的位置:程序门 -> vc/mfc -> 图形处理/算法



如何在vc中打开bmp图片


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何在vc中打开bmp图片
发表于:2007-12-18 11:00:25 楼主
如何在vc中打开bmp图片
发表于:2007-12-18 11:09:041楼 得分:0
将bmp图导到资源中,然后cbbitmap::loadbitmap()加进来,最简单的办法
发表于:2007-12-18 11:12:182楼 得分:0
你先得给它一个容器啊,显示在view中,dialog或者控件上?
发表于:2007-12-18 11:16:163楼 得分:0
最省事的,直接在资源里加载,呵呵
发表于:2007-12-18 23:01:234楼 得分:0
还是自己建个类吧,就是麻烦点,网上资源很多啊!
发表于:2007-12-19 00:10:305楼 得分:0
如果是动态打开的bmp文件,要调用setdibitstodevice
发表于:2007-12-19 09:32:506楼 得分:0
loadbitmap
loadimage好些
发表于:2007-12-19 10:58:137楼 得分:0
可以找一下cdib这个类。网上应该是很多的,要不去找个何斌的代码看看
发表于:2007-12-19 11:15:198楼 得分:0
楼主意思是用vc编程以实现打开bmp图像,以便后续的图像处理吧??

其实网上有很多源代码,很多书上也有!!

1、要知道bmp的结构,它包括文件头、信息头、颜色表和图像数据四部分!
2、然后把bmp的四部分一部分一部分打开,前面两个头信息包括一些对你后续有用的数据,最后的图像数据部分就是我们进行图像处理真正的数据!
3、图像读进来以后,可以自己做一下显示函数(如:stretchdibits),就可以显示了!


个人觉得打开bmp是图像处理的基础,即使用了别人的程序,最好自己也要看懂,这样既可以了解bmp的结构有利于图像处理,而且对编程提高也有用!
发表于:2007-12-19 11:20:259楼 得分:0
本人有这个代码,呵呵,是我们老师在课堂上亲自领我们做的。
发表于:2007-12-19 11:37:4810楼 得分:0
前几天我也刚刚学了这个,拿出大家看一下,比较有没有更简单的方法

代码如下:

(1)在头文件里的加:
#define   videoheight     600
#define   videowidth       800

bitmapinfo   bitinfo;
bitmapfileheader   bitfile;
byte   imgbuf[videowidth*videoheight*3];
byte   imgbuf_temp[videowidth*videoheight*3];

#define   bheight   bitinfo.bmiheader.biheight
#define   bwidth   bitinfo.bmiheader.biwidth


(2)初始化
                  bitinfo.bmiheader.bibitcount             =   24;
bitinfo.bmiheader.biclrimportant     =   0;
bitinfo.bmiheader.biclrused               =   0;
bitinfo.bmiheader.bicompression       =   bi_rgb;
bitinfo.bmiheader.biheight                 =   videoheight;
bitinfo.bmiheader.biwidth                   =   videowidth;
bitinfo.bmiheader.biplanes                 =   1;
bitinfo.bmiheader.bisize                     =   40;
bitinfo.bmiheader.bisizeimage           =   videowidth*videoheight*3;
bitinfo.bmiheader.bixpelspermeter   =   videowidth;
bitinfo.bmiheader.biypelspermeter   =   videoheight;


(3)在你的消息响应里的代码

                  cfiledialog   dlg(true,null,null,ofn_hidereadonly,
"bmp(*.bmp) ¦*.bmp ¦ ¦",null);
if(dlg.domodal()   ==   idok)
pathname   =   dlg.getpathname();
cfile   f;
f.open(pathname   ,   cfile::moderead   ,   null);
f.read(&bitfile,sizeof(bitmapfileheader));
f.read(&bitinfo,sizeof(bitmapinfoheader));
f.read(imgbuf,bwidth*bheight*3);
memcpy(imgbuf_temp,imgbuf,bwidth*bheight*3);

cdc   memdc;
cbitmap   bitmap;
cclientdc   dc(this);

bitmap.createcompatiblebitmap(&dc,bwidth,bheight);
memdc.createcompatibledc(&dc);
memdc.selectobject(&bitmap);
setstretchbltmode(memdc.m_hdc,blackonwhite);//coloroncolor);
stretchdibits(memdc.m_hdc,0,0,bwidth,bheight,
0,0,bwidth,bheight,imgbuf,&bitinfo,dib_rgb_colors,srccopy);

dc.bitblt(0,0,bwidth,bheight,&memdc,0,0,srccopy);

memdc.deletedc();

发表于:2007-12-19 11:45:5911楼 得分:0
没注释,自己看看应该能明白的


快速检索

最新资讯
热门点击