背景
图形变换是指对绘制的图形进行平移、旋转、伸缩等操作,由 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);//绘制矩形
}