【问题标题】:Drawing image stamps along a path with Cairo使用 Cairo 沿路径绘制图像图章
【发布时间】:2015-01-30 16:49:48
【问题描述】:

作为我初步研究的一部分,为了了解使用 Cairo 是否适合我们,我正在寻找是否可以在距离路径起点的给定距离处获得 (x,y) 点。我查看了 Cairo 示例和 API,但没有发现任何表明这是可能的。如果我们必须从头开始构建自己的 Bezier 路径实现,那将是一件痛苦的事情。

在 android 上有一个名为 PathMeasure 的类。这允许在距离路径起点的给定距离处获得 (x,y) 点。这使我可以在想要的距离上轻松地绘制印章,从而能够产生如下图所示的效果。

希望有人能指出我正确的方向。

【问题讨论】:

  • 在第二个示例中,您似乎还为您的图章指定了旋转和比例。这也是要求的一部分吗?
  • 据你了解,Cairo 和Java Android 路径概念是否匹配? cairographics.org/manual/…developer.android.com/reference/android/graphics/Path.html Cairo 的文档对我来说不是那么清楚......
  • Android 和 Cairo 路径似乎相似,因为它们将点 A 到 B 到 C。就像在 Android 和 Cairo 中一样,当您承诺绘制路径时,计算会在内部进行绘制这些点之间的像素。我想我只需要下载源代码并进行实际代码测试即可:/

标签: cairo


【解决方案1】:

除非我对你所说的“路径”有不完全的理解,看来你可以从this guide开始完成任务。您将使用多个cr(图像位置、旋转、缩放)和一个image 实例。

根据我从您的图像中了解到的情况,您需要使用混合(例如 Alpha 通道),我会说逐像素设置 Alpha 通道(透明度)与原始灰度值成比例/相同,并且所有 R G B 像素值变为黑色 (0)。

为了直接作用于您的输入图像(在您将加载的文件上),通过谷歌搜索“将灰度图像转换为 alpha”,我找到了几个 Photoshop 的结果,有些是 gimp,我不知道你有什么可用的.

否则,您将不得不直接在代码中访问图像像素。要读取/编辑像素值,您可以使用cairo_image_surface_get_data。首先,您必须使用cairo_image_surface_create 创建目标图像 使用格式CAIRO_FORMAT_ARGB32

同样,在从原始图像创建格式为CAIRO_FORMAT_A8 的 Alpha 通道图像后,您可以使用 cairo_mask 绘制图像大小的黑色矩形(同样,逐像素访问似乎是唯一可能的方法鉴于cairo_image_surface_create_from_png的限制)。

使用cairo_paint_with_alpha 代替cairo_paint 是不合适的,因为整个图像的alpha 通道是恒定的。

【讨论】:

  • 您好,感谢您抽出宝贵时间回答我的问题。因此,您提供的答案确实对我最终要深入研究的特定领域有所帮助。那是第二部分。但是,决定是否使用 Cairo 的主要问题是我是否可以在任何给定距离读取路径的实际像素位置。请查看更新后的问题。
猜你喜欢
  • 1970-01-01
  • 2016-02-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2011-08-20
  • 1970-01-01
  • 2011-06-29
相关资源
最近更新 更多