有没有办法填充闭合路径(多边形)之外的所有内容?
背景:我想用海岸线渲染一些地图 - 所以有时我需要用蓝色填充海洋,所以我认为用蓝色填充海岸线多边形之外的所有内容是最简单的,在我的情况下也是最有效的颜色。
提前致谢!
由于 ReportLab 不支持 Python 3,我现在尝试使用 cairo 生成 PDF,它可以工作,但缺乏文本换行支持。下一步似乎需要 pango 及其 Python 绑定,但我找不到任何有关如何为 Windows 安装它的信息。
我正在尝试将 Cairo ImageSurface 转换为 PIL Image 对象,以便可以将其传递到 ffmpeg 管道。
到目前为止我所拥有的是:
其中 svgstr 将图像的 SVG 数据保存为字符串。
img = cairo.ImageSurface(cairo.FORMAT_ARGB32, 386,1080)
ctx = cairo.Context(img)
#render the svg as a png
handle= rsvg.Handle(None, svgstr)
handle.render_cairo(ctx)
imgPIL = Image.frombuffer("RGBA",( img.get_width(),img.get_height() ),img.get_data(),"raw","RGBA",0,1)
img44 = imgPIL.convert("RGBA")
img44.save(p.stdin,"PNG")
Run Code Online (Sandbox Code Playgroud)
如果我将图像保存到文件而不是将其传递到管道,我会得到某种版本的灰度。当传递到管道时,它会给出“IOError:[Errno 32] Broken pipeline”
最终,我只是尝试将 SVG 数据转换为某种对象,我可以将其传递到 ffmpeg 管道以将图像连接到视频中,而无需先将图像保存到磁盘。
I'm doing some programming with cairo and xlib in C++, my code is listed below.
I had some flickering issues but by modifying my code, it seems works good now generally.
But when the window is resized at a small size (about 600x450 on my laptop), it is still flickering.
How can I fix it?
#include <cairo.h>
#include <cairo-xlib.h>
#include <string>
#include <cstdio>
using namespace std;
int main (int argc, char *argv[])
{
cairo_surface_t *surface;
cairo_t *cr;
surface …Run Code Online (Sandbox Code Playgroud) Cairo 依赖于 FontConfig。FontConfig 依赖于 Freetype。我已经构建了 FreeType,但是当我尝试构建 FontConfig 时,我收到链接错误,因为 FreeType 需要 HarfBuzz。
当我尝试构建 Harfbuzz 时,它依赖于 FreeType。因此我们有一个循环依赖。此时的 makefile 已损坏:当它尝试构建测试时,它们无法链接,因为它们需要来自 Harbuzz 本身的符号。这个问题可以通过在链接线上添加两次 HarfBuzz 来解决。或者删除所有测试,这就是我所做的。这样就解决了这个问题。
Harfbuzz 有一个名为“helper-cairo.cc”的文件。当我尝试编译它时,它抱怨缺少 FontConfig 头文件,所以显然存在对 FontConfig 的依赖。但是,如果不先构建 HarfBuzz,我就无法构建 FontConfig!
我不知道如何解决这种依赖性。也许我可以在构建 HarfBuzz 时禁用 Cairo 助手,使用生成的库构建 FontConfig,然后使用生成的 FontConfig 重建 HarfBuzz,然后重建 FontConfig?这一切看起来都是一个很大的麻烦。
我正在使用 MinGW 进行构建,而 Windows DLL 不喜欢未解析的符号,因此我认为我无法使用共享库来解决此问题。我不太确定为什么在链接 FontConfig 时需要 HarfBuzz - 也许它正在尝试构建 DLL :(
有什么想法可以在不丢失重要功能的情况下解决这个问题吗?
cairosvg 的命令行版本允许缩放。这是帮助函数的输出:
cairosvg -h
usage: cairosvg [-h] [-v] [-f {pdf,png,ps,svg}] [-d DPI] [-W WIDTH]
[-H HEIGHT] [-s SCALE] [-u] [-o OUTPUT]
input
CairoSVG - A simple SVG converter based on Cairo.
positional arguments:
input input filename or URL
optional arguments:
-h, --help show this help message and exit
-v, --version show program\'s version number and exit
-f {pdf,png,ps,svg}, --format {pdf,png,ps,svg}
output format
-d DPI, --dpi DPI ratio between 1 inch and 1 pixel
-W WIDTH, --width WIDTH
width of the …Run Code Online (Sandbox Code Playgroud) 我试图将 gstreamer 的 GUI 集成教程(https://gstreamer.freedesktop.org/documentation/tutorials/basic/toolkit-integration.html?gi-language=c)从 gtk3 移植到 gtk4。我在获取属于 GtkDrawingArea 的 X 窗口时遇到了问题。在 gtk3 中,要获取 XID 并将其传递给 GstVideoOverlay,使用以下方法:
static void realize_cb (GtkWidget *widget, CustomData *data) {
GdkWindow *window = gtk_widget_get_window (widget);
guintptr window_handle;
if (!gdk_window_ensure_native (window))
g_error ("Couldn't create native window needed for GstVideoOverlay!");
/* Retrieve window handler from GDK */
window_handle = GDK_WINDOW_XID (window);
/* Pass it to playbin, which implements VideoOverlay and will forward it to the video sink */
gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (data->playbin), window_handle);
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何在 Gtk4 …
我发现 R 的默认绘图的别名很差。作为解决方案,我将 Cairo 设置为图形设备,现在绘图看起来好多了。
不幸的是,使用 Cairo 产生了另一个问题,即由于某种原因,我无法应用在绘图窗口中显示图形时使用的字体(在上面的左图中,使用了 Cambria,但右图未能应用此字体)。
这是我的代码:
library(readxl)
library(scales)
library(ggplot2)
library(dplyr)
library('Cairo')
windowsFonts(Cam = windowsFont("Cambria"))
dataset <- read_excel('CW Data.xlsx')
colnames(dataset)[4] <- "Broadband Subs (%)"
options(scipen = 1000)
# Scatter plot FDI~GDP with regression line
CairoWin()
ggplot(dataset, aes(x=`2019 GDP ($bn)`, y=`2019 FDI ($m)`)) +
geom_point(size=3, shape=1) +
geom_smooth(method='lm',formula=y~x, se=FALSE, color='black') +
scale_x_continuous(label = comma) + scale_y_continuous(label=comma) +
theme(panel.background = element_rect(fill="peachpuff"),
plot.background = element_rect(fill="peachpuff")) +
theme(panel.grid.major = element_line(colour = "gray72"),
panel.grid.minor = element_line(colour = "gray72")) +
theme(text = element_text(family …Run Code Online (Sandbox Code Playgroud) 我正在制作游戏并考虑使用矢量形状进行UI.我想知道最好的渲染器是什么.我认为Agg比开罗更快,但如果可用,开罗可以使用硬件加速.opengl怎么样?我是一个好主意,我使用gl纹理图像和线条做矩形,圆角矩形和圆形?或者更好的是我在opengl中渲染cairo表面?我找到的其他替代品是Google Skia和SFML.你觉得Skia怎么样?SFML还绘制多边形.我可以使用多边形制作圆角形状.我甚至考虑使用SDL或SFML来控制事件.在这两个中我都可以创建一个OpenGL上下文,并且我已经习惯了它们在控制事件方面的角色,这些事件是跨平台的.我想要一个跨平台的解决方案.它应该在linux,mac和windows中工作.