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