GDI+ 中图像基本变换

2023-11-11

背景

图形变换是指对绘制的图形进行平移、旋转、伸缩等操作,由 Graphics 类提供对应的成员函数进行实现

平移变换

①.概述
平移变换将所绘制图形的坐标 (x, y) 全部平移一个增量 (dx, dy),对应成员函数 TranslateTransform ,相当于移动了绘图的坐标系原点。

②.平移变换

void DemoGDI::DrawUser(HDC hdc)
{
  Graphics graphics(hdc);//构造 Graphics 对象
  Pen m_pen(Color::Blue, 2);
  Rect m_rect(30, 30, 180, 120);

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形

  graphics.TranslateTransform(20, 40);//x 平移20,y 平移40

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形

}

在这里插入图片描述

旋转变换

①.概述

旋转变换将所绘制图形的坐标(x, y)全部旋转 α度,是相对于左上角的坐标原点进行旋转。对应成员函数 RotateTransform。

②.旋转变换

void DemoGDI::DrawUser(HDC hdc)
{
  Graphics graphics(hdc);//构造 Graphics 对象
  Pen m_pen(Color::Blue, 2);
  Rect m_rect(30, 30, 180, 120);

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形

  graphics.RotateTransform(10);//旋转10度

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形

}

在这里插入图片描述

伸缩变换

①.概念
伸缩变换将所绘制图形的形状在 x 和 y 方向上按指定比例 sx 和 sy 进行缩放,对应成员函数 ScaleTransform,变换的是图形中各坐标点的值。

②.伸缩变换

void DemoGDI::DrawUser(HDC hdc)
{
  Graphics graphics(hdc);//构造 Graphics 对象
  Pen m_pen(Color::Blue, 2);
  Rect m_rect(30, 30, 180, 120);

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
  graphics.ScaleTransform(0.3f, 0.3f);//x、y 变为原来的 0.3

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形

}

在这里插入图片描述

③.镜像变换

void DemoGDI::DrawUser(HDC hdc)
{
  Graphics graphics(hdc);//构造 Graphics 对象
  Pen m_pen(Color::Blue, 2);

  Font font(L"宋体", 30, FontStyleRegular, UnitPixel);  
  SolidBrush solidBrush(Color::Blue);
  StringFormat stringFormat;
  stringFormat.SetLineAlignment(StringAlignmentCenter);

  graphics.TranslateTransform(250, 40);//更改坐标原点

  QString m_text = "GDI+文字绘制";
  graphics.DrawString(m_text.toStdWString().c_str() , -1, &font, PointF(0.0f, 40.0f), &stringFormat, &solidBrush);

  graphics.ScaleTransform(-1, 1);//上下对称

  graphics.DrawString(m_text.toStdWString().c_str(), -1, &font, PointF(0.0f, 40.0f), &stringFormat, &solidBrush);

}

在这里插入图片描述

矩形缩放

①.概述
Rect 类提供有成员函数 Inflate 用于矩形进行缩放,缩放结果是把矩形的四个边向外扩展或者向内收缩指定的距离。

②.Inflate使用

void DemoGDI::DrawUser(HDC hdc)
{
  Graphics graphics(hdc);//构造 Graphics 对象
  Pen m_pen(Color::Blue, 2);
  Rect m_rect(30, 30, 180, 120);

  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形

  m_rect.Inflate(-10, -10);//4条边向内收缩10个像素
  
  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
}

在这里插入图片描述

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

GDI+ 中图像基本变换 的相关文章

随机推荐

  • (JAVA练习)输入,输出二维数组

    题目 输入 输出二维数组 解答 import java util Scanner public class Erweishuzu public static void main String args 二维数组练习 Scanner sc n
  • element-ui 中dialog居中

    标题element ui 中dialog居中 el dialog display flex flex direction column margin 0 important position absolute top 50 left 50
  • 一款强大的浏览器翻译插件 - 沉浸式的翻译

    起因 前一段时间谷歌翻译宣布跑路 不再对大陆用户提供服务 听闻这一噩耗我不由得心里一惊 燕子 啊不是 谷歌没有你我可咋活呀 对于没太大工作需求 顶多遇上几个不认识单词或需要翻译网页的我来说 Chrome 自带的谷歌翻译可以说是我最常用的翻译
  • micropython源码分析之qstr

    前言 最近在研究micropython的源码编译过程 简单记录下关于qstr部分内容 本篇文章基于micropython1 18版本源码 1 19版本及之后可能会略有差异 标识符与相应对象的联系 Micropython中有很多标识符 例如l
  • 工作笔记:TrueCrypt编译记录

    工作笔记 TrueCrypt编译记录 TrueCrypt的最新版本6 2可以从官方网站上下载 我从这里下载了一个6 1的 http freedos pri ee truecrypt 在TrueCrypt官方网站上很多旧版本都没了 这里却很全
  • 关于Python中中文文本文件使用二进制方式读取后的解码UnicodeDecodeError问题

    最近老猿在进行文件操作的验证测试 发现对于中文文本文件如果使用二进制方式打开 返回的类型是bytes 如果要转换成可读的字符串信息需要进行解码 可是老猿使用decode 或decode UTF 8 解码后报错 Traceback most
  • 从零开始SpringCloud Alibaba实战(79)——Spring-Boot+AOP+统计单次请求方法的执行次数和耗时

    文章目录 前言 代码 ThreadLocal方案 前言 作为工程师 不能仅仅满足于实现了现有的功能逻辑 还必须深入认识系统 一次请求 流经了哪些方法 执行了多少次DB操作 访问了多少次文件操作 调用多少次API操作 总共有多少次IO操作 多
  • Java技术体系平台

    Java SE Java Standard Edition 标准版 支持面向桌面级应用 如Windows下的应用程序 的Java平台 提供了完整的Java核心API 此版本以前称为J2SE Java EE Java Enterprise E
  • CMSIS 到底是什么?

    CMSIS 到底是什么 先来看看ARM公司对CMSIS的定义 ARM Cortex 微控制器软件接口标准 CMSIS 是 Cortex M 处理器系列的与供应商无关的硬件抽象层 CMSIS 可实现与处理器和外设之间的一致且简单的软件接口 从
  • 【网络自定向下的学习】——TCP3次握手和4次挥手详解

    目录 前言 一 可靠数据传输 1 确认应答机制 2 超时重传机制 二 建立连接 三次握手 1 建立连接的过程 2 为什么会有三次握手 3 三次握手可以携带数据吗 4 什么是半连接队列 三 断开连接 4次挥手 1 4次挥手的过程 2 为什么连
  • 浅谈ChatGPT与企业数字化转型

    ChatGPT作为当今一个现象级的爆款概念 它的出现 会与企业数字化碰撞出怎么样的花火 很多数字化转型中的企业 咨询师 也都把目光转向ChatGPT 以及ChatGPT背后的大模型 也许 ChatGPT会给数字化转型带来新一轮的发展 助推剂
  • .net 抽奖概率计算

    公司需要做一个大转盘抽奖的活动 其实最关键的地方就是奖品的概率计算了 不过前两天做的这个计算规则挺简单 设置每个奖品的概率 所有奖品概率之和 乘以 随机值 0 1之间的double类型小数 抽中值 然后循环判断每个奖品的概率 直到大于抽中值
  • RT-Thread内核启动流程

    一般了解一份代码大多从启动部分开始 同样这里也采用这种方式 先寻找启动的源头 RT Thread 支持多种平台和多种编译器 而 rtthread startup 函数是 RT Thread 规定的统一启动入口 一般执行顺序是 系统先从启动文
  • Git rebase -i 合并多次提交

    我们在开发项目的过程中可能提交了多次代码 但有时候需要合并多次commit 实现的效果如下 如果你需要合并多个commit就通过Git log看下查你要合并commit的ID 记住最早的commit ID 如 123abc git reba
  • 什么是MVVM,vue的MVVM原理

    1 Mvvm定义MVVM是Model View ViewModel的简写 即模型 视图 视图模型 模型 指的是后端传递的数据 视图 指的是所看到的页面 视图模型 mvvm模式的核心 它是连接view和model的桥梁 它有两个方向 一是将
  • [906]git设置忽略文件.gitignore

    在仓库目录下新建一个名为 gitignore的文件 因为是点开头 没有文件名 没办法直接在windows目录下直接创建 必须通过右键Git Bash 按照linux的方式来新建 gitignore文件 gitignore文件对其所在的目录及
  • KeyError错误

    KeyError错误出现时可能是检索不到这个键名 就我自己碰到的这个问题来说 是编码的原因 前因是用了一个别人写的读取标定参数的函数 def read calib file path taken from https github com
  • 用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。 如果只允许进行一次交易,也就是说只允许买一支股票并卖掉,求最大的收益。

    用一个数组表示股票每天的价格 数组的第i个数表示股票在第i天的价格 如果只允许进行一次交易 也就是说只允许买一支股票并卖掉 求最大的收益 提示 从前向后遍历数组 记录当前出现过的最低价格 作为买入价格 并计算以当天价格出售的收益 作为可能的
  • Kati详解-Android10.0编译系统(五)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • GDI+ 中图像基本变换

    背景 图形变换是指对绘制的图形进行平移 旋转 伸缩等操作 由 Graphics 类提供对应的成员函数进行实现 平移变换 概述 平移变换将所绘制图形的坐标 x y 全部平移一个增量 dx dy 对应成员函数 TranslateTransfor