GDI+ Graphics类

2023-11-05

1 GDI+的核心:Graphics类


(1)The Graphics class provides methods for drawing lines, curves, figures, images, and text. A Graphics object stores attributes of the display device and attributes of the items to be drawn.【msdn】

        Graphics是一个device context和你的drawing conetent之间的一个中介。它存储了device context的相关属性,以及drawing content的属性。这样,它就能用自己的方法把drawing content“映射”到device content 之上。

(2)GDI+的核心是Graphics类,包含了显示、绘图等功能。它提供了四个构造函数:
   Graphics::Graphics(Image*)
   Graphics::Graphics(HDC)
   Graphics::Graphics(HDC,HANDLE)
   Graphics::Graphics(HWND,BOOL)

   构造函数1从image对象创建一个Graphics类。这种方式允许你在打开某张,或者生成某张位图之后,应用Grapgics的方法对改位图进行操作。

   构造函数2从一个传统的HDC获取一个Graphics对象,把传统的在HDC完成的操作接手过来。也就是当要画直线,曲线,图形等时,采用这种构造函数。

   后面两种构造函数这里不说了!

(3)如果读者有GDI编程经验的话,应该会联想起CDC::CreateCompatibleDC和CBitmap::
CreateCompatibleBitmap吧?再列举Graphics中有代表性的用于绘图的成员函数:
   Graphics::DrawArc(Pen*,INT,INT,INT,INT,REAL,REAL)
   Graphics::DrawBeziers(Pen*,Point*,INT)
   Graphics::DrawClosedCurve(Pen*,Point*,INT)
   Graphics::DrawCurve(Pen*,Point*,INT)
   Graphics::DrawEllipse(Pen*,Rect&)
   Graphics::DrawImage(Image*,RectF&)
   Graphics::DrawLine(Pen*,Point&,Point&)
   Graphics::DrawPie(Pen*,Rect&,REAL,REAL)
   Graphics::DrawPolygon(Pen*,Point*,INT*)
   Graphics::DrawRectangle(Pen*,Rect&)
   是不是非常象CDC?从这里大家也能猜出一点Graphics类和CDC类的异同吧!简单的说,Graphics的层次更高一些,封装的更好。

 

2  GDI+的几个特点:

   (1)传统的GDI编程最痛苦的是什么?是不停的CreateObject,SeleteObject,DeleteObject——代码繁琐,一不小心还会内存泄露……现在GDI+结束了这一切,就凭这一个理由,也足够我们转向GDI+了,呵呵。从上面的几个成员函数可以看出来,每个绘图动作都指定了画笔、刷子或者Image,完全抛弃了SelectObject的概念。

   (2)GDI+里面的颜色更加丰富,全面支持32位色,从Color类的构造函数就可以看出来:

           Color::Color(BYTE a, BYTE r, BYTE g, BYTE b);其中a就是透明度。

   (3)GDI+里的所有函数都只接受Unicode字符串,编写代码的时候需要注意这一点。  


FROM: http://blog.csdn.net/keyouan2008/article/details/5809519

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDI+ Graphics类 的相关文章

  • sqli-labs(38-41)

    0x01 原理 堆叠注入 顾名思义就是很多语句结合在一起进行注入 在sql语句中 以 标志着一条语句的结束 要实现堆叠注入就是用 连接多条语句进行注入 即我们可以结束一个语句后 构造下一个语句 而union select也是将两条语句结合在
  • install4j与exe4简介——Java应用程序打包工具

    对于已经完成的Java应用程序开 发项目 从商业化角度看 应该制作成安全稳定的安装程序包来保证产品的安全和企业的利益 现在市面上比较高效的商业化工具有 installshield installanywhere install4j等 ins
  • 2019~2020数字货币领域发展趋势报告

    一 数字货币的概述 1 什么是数字货币 对于数字货币 目前并没有准确的统一定义 根据百度百科资料显示 数字货币是电子货币形式的替代货币 数字金币和密码货币都属于数字货币 是一种不受管制的 数字化的货币 通常由开发者发行和管理 被特定虚拟社区
  • pytorch使用profiler对模型性能分析时报错

    源码 参考自 PyTorch模型性能分析 优化及部署 aliyun com def analysis from torch profiler import profile tensorboard trace handler import t
  • Java Instrument 功能使用及原理

    0 介绍 利用 java lang instrument 做动态 Instrumentation 是 Java SE 5 的新特性 它把 Java 的 instrument 功能从本地代码中解放出来 使之可以用 Java 代码的方式解决问题

随机推荐

  • 弹弹弹,弹走鱼尾纹的弹出菜单(vue)

    前言 上一篇面试的总结 大家看的还行 因为量很大 错误在所难免 希望大家发现错误了可以告诉我一声 我的邮箱是236490794 qq com 一个小前端的希望 言归正传 我们老样子直接先上效果图再开始今天的分享这个项目的github可以看一
  • mpvue,uni-app开发微信小程序遇到的坑,直接在组件上写样式失效

    1 问题 在组件上直接写样式在小程序中不生效 解决办法
  • 互联网摸鱼日报(2023-06-25)

    互联网摸鱼日报 2023 06 25 InfoQ 热门话题 PayPal开源JunoDB 支持3500亿次日请求的键值存储 博客园新闻 马斯克小扎公开约架 亿万富翁八角笼决斗 Meta发言人 不是玩笑 亚马逊云斥资1亿美元建AIGC中心 微
  • 分布式训练——集合通信及其通信原语

    分布式训练 集合通信及其通信原语 转自 分布式训练 第3篇 集合通信及其通信原语 作者 常平 1 概述 集合通信 Collective Communications 是一个进程组的所有进程都参与的全局通信操作 其最为基础的操作有 发送sen
  • EHCI控制器(3)——host模式数据传输模型

    3 host模式数据传输模型 3 1控制传输 3 1 1配置通道特性 3 1 2配置通道0 包数量 3 1 3配置通道0 PID 3 1 4配置DMA描述符 3 1 5更新DMA描述符地址 3 1 6清通道0中断状态 3 1 7使能通道0
  • java代码_阿里Java团队的的代码规范,学到很多

    一 迭代entrySet 获取Map 的key 和value 当循环中只需要获取Map 的主键key时 迭代keySet 是正确的 但是 当需要主键key 和取值value 时 迭代entrySet 才是更高效的做法 其比先迭代keySet
  • mysql 本周函数_MySQL的YEARWEEK函数以及查询本周数据(转)

    MySQL的YEARWEEK函数以及查询本周数据 MySQL 的 YEARWEEK 是获取年份和周数的一个函数 函数形式为 YEARWEEK date mode 例如 2010 3 14 礼拜天 SELECT YEARWEEK 2010 3
  • Oracle+jdbc+rac+url,jdbc连接oracle rac数据库的写法

    RAC是real application clusters的缩写 译为 实时应用集群 是Oracle新版数据库中采用的一项新技术 是高可用性的一种 也是Oracle数据库支持网格计算环境的核心技术 jdbc连接oracle rac数据库的写
  • JDBC与PostgreSQL(二)

    目录 一 执行DDL语句 二 执行DML语句 三 执行DQL语句 四 使用预编译的方式执行SQL语句 推荐 一 执行DDL语句 SQL的DDL语句也就是数据定义语言 Data Definition Language 在JDBC中需要获取St
  • linux下U盘和SD卡的热拔插检测

    在Linux中 可以使用udev Linux设备管理器 来检测U盘的插入和拔出事件 udev是一个用于管理和监控设备的子系统 它可以通过监视内核事件来触发相应的操作 创建一个udev规则文件 10 usb rules脚本如下 KERNEL
  • 开源水下机器人之推进器使用教程

    主要还是参考官方原文 点击打开链接 首先看看套件外观 中规中矩 比较简单 器件材料
  • 安装laravel 遇到的一个坑

    在安装php spider之前必须安装Composer 安装Composer之后 通过php spider的说明文档进行安装 出现以下错误 Failed to download vdb uri from source The Process
  • JS逆向 数据类型/常用加密之小白入门基础篇一

    JS逆向 数据类型 常用加密之小白入门基础篇一 文章目录 JS逆向 数据类型 常用加密之小白入门基础篇一 TOC 文章目录 前言 一 JavaScript 基础常识 语法基础 1 1基本数据类型 1 2 引用数据类型 1 3 语句标识符 2
  • 《武术与设计模式》创建型

    本人喜欢武术 故写下此篇 权当消遣 仅供参考 创建型 原意 创建对象的模式 单例 程序 一个对象就存在一个 武林 所谓 武林至尊 宝刀屠龙 号令天下 莫敢不从 匠人在打造屠龙宝刀时 决定打造一件世间仅此一件的宝物 简单工厂 程序 某种类型指
  • 【数据库】MySQL中的锁机制

    MySQL中的锁机制 数据库锁定机制简单来说 就是数据库为了保证数据的一致性 而使各种共享资源在被并发访问变得有序所设计的一种规则 MySQL 数据库由于其自身架构的特点 存在多种数据存储引擎 每种存储引擎的锁定机制都是为各自所面对的特定场
  • 在树莓派linux系统下写c程序

    本文主要介绍如何在树莓派 ubuntu mate系统 下写第一个c程序 两种方式 一是emacs 二是vi 一 用emacs写c程序 1 打开终端 输入 emacs hello em world c 如果你还没有安装 会出现以下提示 如图
  • 关于解决多台服务器间的文件实时同步问题

    最近要做一个相关的解决方案 在虚拟机测试没有问题 给大家分享出来 有更好的解决方案 欢迎讨论 1 1 inotify相关介绍 1 rsync 与传统的cp tar备份方式相比 rsync具有安全性高 备份迅速 支持增量备份等优点 通过rsy
  • java NIO

    概述 NIO主要有三大核心部分 Channel 通道 Buffer 缓冲区 Selector 选择器 NIO 与 IO的区别 IO是面向流的 NIO是面向缓冲区的 Java IO面向流意味着每次从流中读一个或多个字节 直至读取所有字节 它们
  • 晦涩难懂的电路反馈,看完终于懂了!

    一 反馈的基本概念 1 1 什么是反馈 反馈 就是把放大电路的输出量的一部分或全部 通过反馈网络以一定的方式又引回到放大电路的输入回路中去 以影响电路的输入信号作用的过程 1 2 放大电路中引入反馈的作用 放大电路静态工作点会随温度的变化而
  • GDI+ Graphics类

    1 GDI 的核心 Graphics类 1 The Graphics class provides methods for drawing lines curves figures images and text A Graphics ob