java - 使用 Cairo 渲染到 SWING 表面(例如 JPanel)

标签 java swing rendering jpanel cairo

我目前正在进行一个项目,我需要在墨卡托投影的世界地图上绘制卫星的预测足迹,并可能进行缩放/裁剪/等。完成 map 。

我认为 Cairo 是一个很好的图书馆,可以用于此目的。有可用的 Java 绑定(bind)。但是,我只是找不到一种方法可以将其渲染到 SWING GUI 上(例如,渲染到 JPanel 的表面上)。我考虑过渲染到字节缓冲区并使用 Java2D 逐像素绘制它,但我找不到任何 API 调用来使 Cairo 渲染到缓冲区(这很奇怪,因为这是我最基本的功能之一' d 期望得到这样一个库的支持)。

我有什么办法可以做到这一点?我知道有 Java2D,但它相当基础。为此,我非常希望有一个功能更强大、应用广泛、经过充分测试、高质量、免费 (LGPL) 的图形库。如果我能以某种方式让它与 SWING 一起工作,Cairo 将是一个完美的选择。

非常感谢您的建议。

最佳答案

Cairo 的基本原理之一是任何非抽象图像上下文都绑定(bind)到受支持的后端之一。 我从未尝试过 Java 绑定(bind),但它们很可能是一个薄层,没有提供新的表面类型 - 您应该使用“Image Surface”类型。

在库的 C 文档中,有一个“cairo_image_surface_get_data()”调用 (此处:http://cairographics.org/manual/cairo-Image-Surfaces.html),它提供了对缓冲区的访问权限。 由于实际使用其内容所需的低级内存访问,绑定(bind)可能没有将其暴露给 Java。如果是这样,那么我建议您采用以下解决方法:

(1) 将结果渲染到 Cairo Image Surface,(2) 使用表面内容写入临时文件,(3) 使用 Java 2D API 读取和显示临时文件。

关于java - 使用 Cairo 渲染到 SWING 表面(例如 JPanel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037204/

相关文章:

javascript - React 中的 setTimeout 隐式地​​将数字输出到 DOM

java - 是否可以使用 Guice 中的 Multibinder 根据应用程序配置构建动态集?

java - 套接字编程。真的那么复杂吗?

java - JTextArea问题

java - 在Runtime.execute()中输入参数并通过java swing应用程序继续执行cmd命令

opengl - opengl map 应用程序中的标签

java - 在模拟中重新渲染面板

java - 如何从 Java 8 lambda/流内部抛出 CHECKED 异常?

java - xSocket 替代 C 库

java - 从 JDialog 打开 JFrame,它显示在 JDialog 的顶部