gpt4 book ai didi

delphi - 在 Delphi XE 中渲染混合矢量和位图图像的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-02 04:26:06 24 4
gpt4 key购买 nike

我希望能够渲染与像素之间的边界叠加的位图图像(边界的颜色来自自制例程)。缩放和平移时,边界的刻度应保持不变。

这是一个示例图像:Image showing how boundary thickness remais unchanged with magnification

对于缩放和平移,我使用graphics32,如所述here为了绘制边界,我想到使用 AggPasMod 为 Delphi 2010、XE、XE2 ... 制作矢量图像,该图像由 Christian Budde here 更新。 .

但是,我正在努力让这两个工具进行交互,因为 AggPasMod 使用它自己的图像类型:TAgg2DImage,我不知道如何在 Timage 中绘制并且graphics32 允许绘制 TBitmap

由于我不是编码专家,因此我非常感谢您就解决该问题的最佳方法提供一些建议。

提前致谢,

最佳答案

您可能想要使用 GR32 的最新(测试版)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 进行资源管理器集成。

一旦获得代码,您就可以开始探索。有很多示例向您展示如何使用矢量引擎。只需查看 Examples\Drawing 下的示例即可。

特别是查看“多边形”示例,您可以在其中使用鼠标创建(和操作)多边形(创建一个简单的三角形需要单击三下)。

要自己创建矢量图形,您可以使用如下代码:

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 代码编写。它既不更快也不更优雅,只是不同。

关于delphi - 在 Delphi XE 中渲染混合矢量和位图图像的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36544603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com