GDI+ 中图像矩阵变换

背景

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

在 GDI+中,矩阵变换所涉及的矩阵,由专门的矩阵类 Matrix 来表示,是一个 3x3的矩阵。

平移变换

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);//绘制矩形

  Matrix m_matrix;//单位矩形
  m_matrix.Translate(10, 20);//平移
  graphics.SetTransform(&m_matrix);//设置矩阵变换
  
  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
}

在这里插入图片描述

旋转变换

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);//绘制矩形

  Matrix m_matrix;//单位矩形
  m_matrix.Rotate(10);//旋转10
  graphics.SetTransform(&m_matrix);//设置矩阵变换
  
  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
}

在这里插入图片描述

指定点旋转

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);//绘制矩形

  Matrix m_matrix;//单位矩形
  m_matrix.RotateAt(20, PointF(120, 75));//绕中心旋转
  graphics.SetTransform(&m_matrix);//设置矩阵变换
  
  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
}

在这里插入图片描述

伸缩变换

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);//绘制矩形

  Matrix m_matrix;//单位矩形
  m_matrix.Scale(0.3f,0.3f);//投影变换
  graphics.SetTransform(&m_matrix);//设置矩阵变换
  
  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
}

在这里插入图片描述

投影变换

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);//绘制矩形

  Matrix m_matrix;//单位矩形
  m_matrix.Shear(0.5f,0.5f);//投影变换
  graphics.SetTransform(&m_matrix);//设置矩阵变换
  
  graphics.DrawRectangle(&m_pen, m_rect);//绘制矩形
  
}

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值