描述
更新该刷的当前变换矩阵的产品本身和翻译矩阵.
C++ Syntax
Status TranslateTransform( [in] REAL dx, [in] REAL dy, [in] MatrixOrder order ); |
FreeBASIC 语法
FUNCTION TranslateTransform ( _ BYVAL dx AS SINGLE, _ BYVAL dy AS SINGLE, _ BYVAL order AS MatrixOrder = MatrixOrderPrepend _ ) AS GpStatus |
参数
dx
[in]单精度数指定翻译的水平分量.
dy
[in]单精度数指定翻译的垂直分量.
order
该MatrixOrder指定相乘的顺序[in, optional]元.MatrixOrderPrepend指定传递矩阵是在左边,和MatrixOrderAppend指定传递矩阵是正确的.默认值是MatrixOrderPrepend.
返回值
如果该方法成功,则返回Ok,这是对Status枚举元素.
如果这个方法失败,它返回一个枚举的其他元素的Status.
备注
一个3?矩阵可以存储任意序列的仿射变换.如果你有几个3?矩阵,其中每一个表示仿射变换,这些矩阵的产品是一个单一的3?表示整个变换序列的矩阵.该产品表示的变换称为复合变换.例如,假设矩阵S表示缩放,和矩阵T代表翻译.如果矩阵M是产品ST,然后矩阵M代表复合变换:规模第一,然后翻译.
矩阵乘法的顺序是重要的.在一般情况下,矩阵的乘积RT不是矩阵的乘积TR相同.在上一段中给出的例子中,由RT复合变换(旋转,然后翻译)不为代表的TR复合变换相同(第一次翻译,然后旋转).
引用文件
CGpBrush.inc (include CGdiPlus.inc)
示例
' ========================================================================================
' The following example creates a linear gradient brush and uses it to fill a rectangle.
' Next, the code modifies the brush's transformation matrix, applying a composite transformation,
' and then fills a rectangle with the transformed brush.
' ========================================================================================
SUB Example_TranslateTransform (BYVAL hdc AS HDC)
' // Create a graphics object from the window device context
DIM graphics AS CGpGraphics = hdc
' // Get the DPI scaling ratio
DIM rxRatio AS SINGLE = graphics.GetDpiX / 96
DIM ryRatio AS SINGLE = graphics.GetDpiY / 96
' // Set the scale transform
graphics.ScaleTransform(rxRatio, ryRatio)
DIM rc AS GpRect = GDIP_RECT(0, 0, 80, 40)
DIM linGrBrush AS CGpLinearGradientBrush = CGpLinearGradientBrush(@rc, _
GDIP_ARGB(255, 255, 0, 0), GDIP_ARGB(255, 0, 0, 255), LinearGradientModeHorizontal)
' // Fill a large area with the gradient brush (no transformation).
graphics.FillRectangle(@linGrBrush, 0, 0, 800, 150)
' // Apply a composite transformation: first scale, then translate.
linGrBrush.ScaleTransform(2, 1) ' // horizontal doubling
linGrBrush.TranslateTransform(30, 0, MatrixOrderAppend) ' // translation
' // Fill a large area with the transformed linear gradient brush.
graphics.FillRectangle(@linGrBrush, 0, 200, 800, 150)
END SUB
' ========================================================================================