你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
GDI和GDI+对象的相互转换
 
 当然希望可以使用GDI+来完全代替GDI,再不济也只需要从GDI对象转到GDI+对象。但是就是有那么些工程,又要新技术新特性、又希望快速开发、又不肯丢弃旧版本的已有的功能。没办法,只能缝缝补补,咔哐碙啌...

一、CDC到Graphics只要这样:
Graphics g(pDC->GetSafeHdc());//只要能构造CDC句柄的MFC对象都可以//CClientDC、CPaintDC,也都可以
二、CBitmap到Graphics需要创建一个内存位图设备:
CDC MemDC; CBitmap MemBitmap;MemDC.CreateCompatibleDC(pDC);MemBitmap.CreateCompatibleBitmap(pDC,size.cx, size.cy);CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);Graphics g(MemDC.GetSafeHdc());///… you can work with GDI+ … ///
或者使用:
Bitmap::Bitmap(HBITMAP,HPALETTE)。static?Bitmap?*FromHBITMAP(HBITMAP?hbm,HPALETTE?hpal);
三、想要用Bitmap来打开图片,却又需要用GDI的绘图函数来操作(一般都为历史遗留问题),就需要将Bitmap对象转换到CBitmap,可以这样:
Bitmap* pPicture = new Bitmap(L"dotLive.jpg");HBITMAP hBitmap;CBitmap* pbm;pPicture->GetHBITMAP(Color(0,0,0),&hBitmap);pbm = CBitmap::FromHandle(aaa1);///… use pbm to do the GDI works ...///pbm->DeleteObject();//要记得删除GDI对象,否则你会发现你的内存占用…
四、保存Bitmap,打开很方便,保存就不那么的方便了。Bitmap或者Image打开图像会自动锁定文件,保存时会产生文件被使用之类的错误。一种折衷的办法是,保存时全新创建一个Bitmap(Image)对象,将原来的对象画到新对象上,然后将原来的对象删除以释放文件。保存新对象。不能用clone,它会将锁定的文件资源一块复制过来,则解锁文件需要的释放对象就又多了一个。
Bitmap* tPic= new Bitmap(L"dotLive.jpg");//锁定文件Bitmap* pPicture = new Bitmap(tPic->GetWidth()                             ,tPic->GetHeight()                             ,tPic->GetPixelFormat());Graphics g(pPicture);g.DrawImage(tPic,0,0,m_nWidth,m_nHeight);//复制过来delete tPic;//解锁/// … use the pPicture to access "dotLive.jpg" … ///CLSID tiffClsid;GetEncoderClsid(L"image/jpeg", &tiffClsid);//这个函数MSDN中有pPicture->Save(L"dotLive.jpg" ,&tiffClsid);//保存
五、Graphics到HDC,想要用Bitmap方便打开图像,又要往图像里写文字作图等。糟糕的是由于历史遗留问题,这些操作都是使用GDI完成的。并且GDI+没有异或绘图模式(实现橡皮筋效果)、没有文字输出底色不透明、字符串需要转换到WChar。咋办呢,可以这样转:
Bitmap* pPicture = new Bitmap(L"dotLive.jpg");//打开图片Graphics tempG(pPicture );HDC hdc = tempG.GetHDC ();//获得GDI句柄CDC* tempDC = CDC::FromHandle(hdc);/// … hurry up, draw what you want … ///tempG.ReleaseHDC(hdc); //要记得relese,GDI都需要释放,否则资源会被占用而不接受其他操作
关于GDI+、图像处理以及.net编程,欢迎到dotlive.cnblogs.com来讨论。
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089