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



一个简单的图像问题:如何在新建的项目文档中显示位图?


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


一个简单的图像问题:如何在新建的项目文档中显示位图?[已结贴,结贴人:wangxianli1983006]
发表于:2007-09-06 09:30:57 楼主
我只是想在项目中(单文档或多文档都可以)点击菜单项“打开”,弹出一个选择文件的对话框,选择一张图片,并在文档中打开。
我的代码是这样的,可以通过编译,但是运行报错(在打开文件选择框,选择完文件后,点击“打开”,出错,也没有显示出图片)
void   cytrytview::onfilereopen()  
{
          char   szfilter[]   =   "bitmap(*.bmp) ¦*.bmp ¦ ¦ ";
          cfiledialog   dlg(true,null,null,ofn_hidereadonly,szfilter);
          if(dlg.domodal()   ==   idok)
            {
                  cstring   filename   =   dlg.getpathname();
                  hbitmap   hbitmap   =   (hbitmap)::loadimage(null,filename,image_bitmap,0,0,lr_loadfromfile);
                  m_pbmp   =   new   cbitmap();
                  m_pbmp-> attach(hbitmap);
            }
  cdc*   pdc;
  ondraw1(pdc);
}
void   cytrytview::ondraw(cdc*   pdc)
{
          cytrytdoc*   pdoc   =   getdocument();
          assert_valid(pdoc);
          cdc   dcmemory;
          cbitmap*   poldbmp;
          dcmemory.createcompatibledc(pdc);
          poldbmp   =   dcmemory.selectobject(m_pbmp);
          pdc-> bitblt(0,0,100,100,
                  &dcmemory,0,0,srccopy);
          dcmemory.selectobject(poldbmp);
}
发表于:2007-09-06 09:36:231楼 得分:0
其中onfilereopen是建立的一个class   wizard
发表于:2007-09-06 09:36:402楼 得分:0
大家帮帮忙啊   。。。。
发表于:2007-09-06 09:51:233楼 得分:0
无论什么方法,只要能在document上显示位图就行,不是我的这段代码也行
发表于:2007-09-06 10:12:584楼 得分:0
可以去看看msdn中的diblook例子
发表于:2007-09-06 10:14:565楼 得分:100
void   ctestview::onloadimg()  
{
invalidate();
                updatewindow();
cdc   *dc   =   getdc();
cdc   thdc;
                hbitmap   thbm;
                bitmap   bmp;
cfiledialog   dlg(true,   null,null,   ofn_hidereadonly   ¦   ofn_overwriteprompt,   null,   null);
if(dlg.domodal()   ==   idok)
{
oldfile   =   dlg.getpathname();
thbm=(hbitmap)loadimage(null,oldfile,image_bitmap,0,0,
lr_loadfromfile ¦lr_createdibsection);//载入位图  
getobject(thbm,sizeof(bmp),&bmp);
if(thdc   ==   null)
{
thdc.createcompatibledc(dc);
}
else
{
afxmessagebox( "图像处理出错,请关闭程序重新打开! ");
}
getobject(thbm,sizeof(bmp),&bmp);//取得位图信息  
selectobject(thdc,thbm);//选入位图至内存dc  
dc-> bitblt(0,0,bmp.bmwidth,   bmp.bmheight,&thdc,0,0,srccopy);
deleteobject(thbm);//删除位图  
}
releasedc(dc);
deletedc(thdc);

}
可以重复打开.
发表于:2007-09-06 14:10:106楼 得分:0
cdc   memdc;    

memdc.createcompatibledc(&clientdc);
if(m_cs_path.getlength()   !=   0)
{
m_bitmap.m_hobject   =   ::loadimage(afxgetinstancehandle(),m_cs_path,image_bitmap,0,0,lr_loadfromfile);
memdc.selectobject(m_bitmap.m_hobject);
::getobject(m_bitmap.m_hobject,sizeof(m_bm),&m_bm);
clientdc.plgblt(p,&memdc,0,0,m_bm.bmwidth,m_bm.bmheight,m_bitmap1,0,0);
}  
memdc.deletedc();
m_bitmap.deleteobject();
p是这样定义的
p[0].x   =   0;
p[0].y   =   0;
p[1].x   =   宽值;
p[1].y   =   0;
p[2].x   =   0;
p[2].y   =   高值;
point   p
发表于:2007-09-06 16:07:357楼 得分:0
谢谢yzh_510同志,我用了你的代码,已经通过了,并且显示了,谢谢你!!!
发表于:2007-09-06 16:16:388楼 得分:0
同时也非常感谢smartdrvsky同志的代码,但是我没有运行出来,可能是其中的参数我定义的不太准确,不过,我也不知道该怎样定义那个   p   。。。


快速检索

最新资讯
热门点击