【问题标题】:Moving a graphic over a background image在背景图像上移动图形
【发布时间】:2021-08-05 00:32:49
【问题描述】:

我有一个新项目,但我真的不知道从哪里开始,除了我认为 GNAT Ada 会很好。我在三年前自学了 Ada,并使用 GNAT 管理了一些静态图形,但这次不同。

请多多包涵,我只需要一两个指向我可能开始的地方的指针,我不是在寻求解决方案。我的历史是使用现在大部分已经过时的后端语言,所以图形仍然是一个挑战。

所以,项目:

使用静态背景图像(照片) - 以及可移动的线条,线条末端之间的某个位置带有可调节光标。我需要旋转线条并调整长度,以及在屏幕上移动它并沿线条滑动光标;我计算行中每个元素的位置没有问题。一旦到位,我需要报告光标相对于行总长度的位置。我可能可以用我已经知道的东西来处理报告,但我不知道如何创建一个可以在另一个图像上滑动的图形。在过去,我未能在 GNAT Ada 中检测到鼠标事件,我确信我需要掌握这一点 - 事实上,如果可以的话,我可能会设法控制线路,但在现有图像上进行操作超出了我。

如果我为此选择 GNAT Ada 是错误的,请提出替代方案。

我在 Stackoverflow 中查找过类似的东西,但只找到了 Blackberry 和 Java 的答案,这两者似乎都不相关。

作为背景,这将是一种从照片中测量昆虫身体特征的相对长度的有用方法,有望为密切相关的物种建立一些明确的识别指南。

【问题讨论】:

  • Ada 是一种通用语言,因此您可以用它做任何事情。但是,根据您的描述,您将需要使用 GtkAda 或 Gnoga 框架来做您想做的事情。
  • 除了已经提供的库选项之外,我想说 ASFML 非常适合这个项目:mgrojo.github.io/ASFML
  • 您可以使用开源 OpenGL 绑定,例如 OpenGLAda flyx.github.io/OpenGLAda 或 GLOBE_3D globe3d.sourceforge.io 。您可以在后一个站点上找到与您打算做的类似的生物信息学应用程序的屏幕截图。 OpenGL 可以在 GtkAda 或 GWindows 等窗口系统中运行。
  • 还可以考虑ImageJ,其中包括feature analysis,并与包括Ada在内的命令行工具链很好地集成。

标签: graphics ada gnat


【解决方案1】:

带有静态背景图片(一张照片)

所以首先你需要一个窗口来放置你的界面。你可以从任何 GUI 框架中获得它(link,由 cmets 中的垃圾神给出)。

和一条可移动的线,在线的两端之间有一个可调节的光标。我需要旋转线条并调整长度,以及在屏幕上移动它并沿线条滑动光标;计算行中每个元素的位置没有问题。

这些是affine transformations。它们通常用于低级图形渲染。您可以像 Zerte 建议的那样使用 OpenGL,但现代 OpenGL 对初学者来说有一个陡峭的学习曲线。

GtkAda 包含与 supports such transformations 的 Cairo 图形库的绑定,因此您可以使用带有 Cairo 表面的 GtkAda 创建一个窗口,然后在其上渲染您的图像和线条。 Cairo 确实有一个学习曲线,而且我从未使用过 Ada 绑定,所以我无法真正给出关于这将是多么复杂的意见。

另一个完全支持您想要做的事情的库是SDL,它具有 Ada 绑定 here。与 GtkAda 的不同之处在于 SDL 是一个纯图形绘制库,因此您需要自己“绘制”任何交互式控件。另一方面,通过 SDL 设置窗口并绘制东西会比通过 GtkAda 和 Cairo 来简单一些。

在 cmets 中也提到过的 SFML 与 SDL 处于同一级别。我不太了解它,无法提供更明智的意见,但我所说的关于 SDL 的内容很可能也适用于 SFML。

在过去,我未能在 GNAT Ada 中检测到鼠标事件,我确信我需要掌握这一点 - 事实上,如果可以的话,我可能会设法控制线路,但要在现有的图片超出了我的想象。

HID 事件处理由您使用的任何 GUI 库处理。如果您使用 SDL,您将从 SDL 获得鼠标事件;如果你使用 GTK,你会从 GTK 获得鼠标事件,等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多