使用世界坐标SVG图像中的屏幕坐标进行命中测试
|
如何使用GDI +将鼠标坐标转换为世界坐标?
还是为使用GDI +绘制的SVG形状获取边界框(甚至更好)的旧的skool区域?
无论如何。我一直在寻找SVG代码并发现:
http://development.mwcs.de/svgimage.html
这是第一个实际用于SVG的Delphi组件,但我离题了。
该组件使用GDI +显示圆,曲线等。
GDI +使用矩阵将世界坐标,旋转和变形转换为屏幕坐标。
这部分我了解。您使用矩阵乘法进行转换。
问题是
如果我将鼠标光标指向封闭的形状:
我从哪里得到矩阵,它将鼠标的屏幕点转换为可以测试到屏幕上画出的圆的世界点?
在所有这些GDI对象中,有太多矩阵可供选择。
请不要给我有关绘制位图和在光标下测试魔术颜色的东西,这不是我想要的。
如果有一串矩阵,我如何以正确的(倒置的)顺序遍历它们,以便将屏幕坐标正确地引导到世界坐标?
换一种说法
从SVG图像读取的形状是基元,它们被矩阵扭曲成屏幕坐标。
如何将屏幕坐标反向转换为可用于查看我是否在形状内的坐标。
请注意
我需要知道我处于哪种形状。
由于设置SVG图像的方式,每个形状都有一个ID,我想用它来查看我用鼠标击中的区域。
编辑
或者
我可以在屏幕坐标中为每个形状获得边界矩形,以便可以以此来检查鼠标坐标。
我可以得到一个旧的Skool GDI区域吗,可以在其中使用屏幕坐标来做一个PtInRegion。
希望您能帮助我找到所有这些变形路径的方法:-)。
没有找到相关结果
已邀请:
2 个回复
骨乏唯瓜
在绘制任何图形之前,该方法将调用Graphics.GetTransform(M)。反过来,这个调用GdipGetWorldTransform,它似乎是WinAPI的GetWorldTransform的包装函数。 我想这可能是一个不错的起点:)
凡夕