一、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(LdotLive.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(LdotLive.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(Limage/jpeg, tiffClsid);//这个函数MSDN中有
pPicture->Save(LdotLive.jpg ,tiffClsid);//保存

五、Graphics到HDC,想要用Bitmap方便打开图像,又要往图像里写文字作图等。糟糕的是由于历史遗留问题,这些操作都是使用GDI完成的。并且GDI+没有异或绘图模式(实现橡皮筋效果)、没有文字输出底色不透明、字符串需要转换到WChar。咋办呢,可以这样转:

Bitmap* pPicture = new Bitmap(LdotLive.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都需要释放,否则资源会被占用而不接受其他操作

转载于:https://www.cnblogs.com/carekee/articles/2178310.html

GDI和GDI+对象的相互转换(转)相关推荐

  1. Windows GDI和GDI+编程实例剖析(1)

    Windows GDI和GDI+编程实例剖析(1) 作者:宋宝华  e-mail:21cnbao@21cn.com 1.基本概念 GDI在Windows中定义为Graphics Device Inte ...

  2. GDI 和GDI+ 混合编程

    主要来源于这篇文章 http://www.cnblogs.com/jcily/archive/2009/05/30/1492222.html?login=1#commentform 在Win32平台下 ...

  3. jquery对象和DOM对象的相互转换详解

    jquery对象和DOM对象的相互转换 在讨论jquery对象和DOM对象的相互转换之前,先约定好定义变量的风格如果获取的是jquery对象,那么在变量前面加上$,例如 var $varible = ...

  4. java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程

    本文主要向大家介绍了JSON字符串和JAVA语言对象的相互转换教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一:字符串转换为对象:使用JSON.parse()方法 var st ...

  5. Javascript 中 JSON 与对象 的相互转换

    1.Json 应用现状 客户端和服务端的数据交换以一定的格式进行,目前,这种数据格式以xml和Json为主.Json是JavaScript Object Notation的简写,采用JavaScrip ...

  6. 初识GDI、GDI+

    GDI在Windows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application Programming Interface)的一个重 ...

  7. php 把java list对象转成数组,java_JSON的String字符串与Java的List列表对象的相互转换,在前端: 1.如果json是List对象 - phpStudy...

    JSON的String字符串与Java的List列表对象的相互转换 在前端:1.如果json是List对象转换的,可以直接遍历json,读取数据. 2.如果是需要把前端的List对象转换为json传到 ...

  8. 7、JSON数据和Java对象的相互转换(客户端和服务器对象数据通讯用)

    JSON数据和Java对象的相互转换 需要使用JSON解析器(它是封装好的工具类),我们测试用用jackson         * 常见的解析器:Jsonlib,Gson(谷歌),fastjson(阿 ...

  9. java DTO对象与PO对象的相互转换

    2018-09-27 10:27:50 前言: 在实际开发中往往需要DTO对象与PO对象的相互转换: 先说说什么是DTO对象吧,个人觉得DTO就是PO的扩展而已,PO专门指向数据库,DTO作扩展(字段 ...

  10. json字符串和对象的相互转换

    大家好呀,我是柚子,今天这篇文章介绍的是json字符串和对象的相互转换~ 文章目录 举例 一.json字符串转对象 1.单个对象 2.多个对象 二.对象转json字符串 1.第一种方式 2.第二种方式 ...

最新文章

  1. 如何用计算机求锐角三角比,9.3用计算器求锐角三角比教学案
  2. zabbix 系统搭建(LAMP环境)+keepalived LVS配置
  3. [PHP] 使用 pcntl 库实现PHP多进程
  4. MVC 中Simditor上传本地图片
  5. linux chromebook arm,第一款可拆卸 ARM Chromebook 可能是 KODAMA
  6. Java 8 的这个新特性,用起来真的很爽!
  7. JavaWeb——AOP
  8. input输入框清除样式
  9. openg es 之一
  10. 文本主题发现(一)-- 数据预处理
  11. stm8L 触摸库使用教程 一步一步
  12. 轻松完成销售业绩的6个技巧
  13. 正则(?=)(?:)
  14. Java常见面试50题(java jsp)
  15. c语言调色板5个参数,R语言中的颜色以及色板
  16. STM32CUBE+自平衡车-前言
  17. 20200414甲醇009空仓转平心得
  18. PHP 常见的数据加密技术
  19. SpringBoot 接口层统一加密解密
  20. 赛题类型 Web、Crypto、Pwn、Reverse、Misc 各是指什么意思?

热门文章

  1. appium使用真机做安卓移动端自动化测试
  2. C++生产和使用的临时对象
  3. 超 短 高精度 bign 模板
  4. ORACLE 数据库的级联查询 一句sql搞定(部门多级)
  5. Spire.Doc 教程:在C#,VB.NET创建、编辑和保存Word
  6. 微软Azure、谷歌GAE、亚马逊AWS比較
  7. webpack配置信息说明
  8. IIS------IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法
  9. nis从服务器接替nis主服务器步骤
  10. please verify the preference field with the prompt:Tomcat JDK name