您可能希望使用 GR32 的最新(beta)版本 2.0,因为它引入了矢量引擎。有了这个,您可以继续使用现有代码并在已有的像素图像上添加矢量图形。
为此,首先切换到最新的 GR32 版本。该代码可以从开放的 SVN 存储库中获得。树干可以在这里找到:
https://sourceforge.net/p/graphics32/code/HEAD/tree/trunk/
如果您使用 SVN(推荐),您可以使用
svn checkout svn://svn.code.sf.net/p/graphics32/code/trunk graphics32-code
或使用 TortoiseSVN 进行资源管理器集成。
一旦你有了代码,你就可以开始探索了。有许多示例向您展示如何使用矢量引擎。只需查看示例\绘图下的示例。
特别是看一下“多边形”示例,您可以在其中使用鼠标创建(和操作)多边形(创建一个简单的三角形需要单击三下)。
要自己创建矢量图形,可以使用如下代码:
uses
..., GR32_Polygons, GR32_Paths, GR32_Brushes;
var
Canvas: TCanvas32;
Stroke: TStrokeBrush;
begin
// use a higher level abstraction class to generate the polygons
Canvas := TCanvas32.Create(Image.Bitmap);
// add a stroke brush and specify the color and width
Canvas.Brushes.Add(TStrokeBrush);
Stroke := TStrokeBrush(Canvas.Brushes[0]);
Stroke.FillColor := SetAlpha(clBlack32, 200);
Stroke.StrokeWidth := 2;
// begin a path
Canvas.Path.BeginPath;
// specify 3 vertices
Canvas.Path.MoveTo(10, 10);
Canvas.Path.LineTo(20, 90);
Canvas.Path.LineTo(60, 40);
// close path
Canvas.Path.ClosePath;
Canvas.Path.EndPath;
end;
此外,您可以使用低级 API。为此,您只需要“GR32_Polygons”单元。相同的代码将如下所示:
uses
..., GR32_Polygons;
var
Points: array of TFloatPoint;
begin
SetLength(Points, 3);
// specify 3 vertices
Points[0] := FloatPoint(10, 10);
Points[1] := FloatPoint(20, 90);
Points[2] := FloatPoint(60, 40);
// draw poylgon with certain color and width
PolylineFS(Image.Bitmap, Points, SetAlpha(clBlack32, 200), True, 2.0);
end;
虽然这首先看起来更简单,但使用矢量引擎绘制的图形越复杂,它就越困难。
为了摆脱单独输入每个顶点,您可以使用 GR32_VectorUtils 单元中的辅助函数。这包括
Rectangle(const R: TFloatRect): TArrayOfFloatPoint;
这应该对您的应用程序最有用。
如果需要,您还可以添加在绘制多边形之前应用的转换。
同样的示例也可以完全使用 AggPas 代码编写。它既不是更快也不是更优雅,只是不同而已。