Dav*_*vid 15 delphi graphics gdi+ gdi transform
我需要绘制一个正方形图像,映射或转换为未知的编译时四边形多边形.我怎样才能做到这一点?
具体问题是渲染具有非矩形地图投影的地图图块.假设我有以下磁贴:

我知道需要有四个角点:

鉴于此,我想得到以下输出:

方形瓷砖可能是:
我认为第二项意味着这需要非仿射变换.
随机附加说明
四面?完全正确的情况是合理的,瓷砖应该映射到具有四个以上点的多边形,但是对于我们的目的和绘制的尺度,方形 - >其他四角多边形变换应该足够了.
为什么只有GDI? 到目前为止,所有渲染都是使用GDI完成的,我希望快速保持代码(a),并且(b)需要尽可能少的额外库.我知道有一些对GDI转换的支持,并且今天一直在试验它们,但即使在试验它们之后,我也不确定它们是否足够灵活用于此目的.如果他们是,我还没有设法弄清楚,所以我真的很感激一些示例代码.
GDI +也可以,因为我们在其他地方使用它,但我知道它可能很慢,速度在这里很重要.
另一种选择是Delphi - / C++ Builder特有的; 这个程序主要是用C++编写的,使用的是VCL,所讨论的图形目前被绘制成TCanvas,混合使用TCanvas方法和原始WinAPI/GDI调用.
叠加图像:最后一点需要注意的是,图块中的一种颜色可能是用于颜色键的透明度:也就是说,上面图块中的所有白色(说)方块在绘制在下面的任何内容时应该是透明的.目前,使用TransparentBlt将切片绘制到方形或轴对齐的矩形目标.
对于让这个问题比"我应该使用什么算法?"更复杂的所有额外警告我感到抱歉.但我也很乐意接受只有算法信息的答案.
看看3D Lab Vector图形.(演示中特别是"足球场").
AggPas是开源和免费的2D矢量图形库.它是Anti-Grain Geometry库的一个Object Pascal原生端口 - AGG,最初由Maxim Shemanarev在C++中编写.AggPas不依赖于任何图形API或技术.基本上,您可以将AggPas视为渲染引擎,该引擎从某些矢量数据在内存中生成像素图像.
以下是perspective演示的样子:

改造后:
