如何解决确定已在画布上应用GDI +偏移,缩放和/或旋转变换的像素的绝对位置
我有使用GDI +在画布上绘制各种规格的Delphi代码。这些量规之一在相对于转换后的GDI +画布的中心的位置绘制了一个小点。 GDI +转换可能包括平移,旋转和/或缩放。
是否有可能确定该点的绝对位置未转换的画布?
gdi := TGPGraphics.Create(Canvas.Handle);
gdi.TranslateTransform(info.Left + info.Width div 2,info.Top + info.Height div 2);
gdi.RotateTransform(info.Angle);
ThisPoint := TGPPoint.Create(30,10);
我需要魔术代码来执行以下操作...
AbsolutePointOnCanvas := UnTransform(ThisPoint);
解决方法
不确定转换方向...
如果要应用相同的转换,则可以调用TransformPoints()将转换应用于TGPPoints数组。
如果要应用逆变换,则必须使用与sign changed
和reverse order
中相同的变换来计算新的变换组合。然后使用TransformPoints到要反向转换的点。
要更好地将变换与图形分开,可以使用TGPMatrix创建变换矩阵,并使用Multiply在单个矩阵中组合多个变换。一旦获得了完整的转换,就可以使用TGpGraphics.SetTransform()应用它。
当外部条件改变时(缩放,平移等),您需要计算一个新的变换矩阵,并将其应用于绘图过程中。
顺便说一句,我更喜欢使用Direct2D画布而不是GDI画布,因为Direct2D使用GPU,并且今天如果使用得当,它比GDI快。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。