标签: cairo

如何让cmake的PKG_CHECK_MODULES在Windows中找到我的cairo库

我正在尝试在win32机器上构建OpenSceneGraph的pdf插件.该插件使用cmake的PKG_CHECK_MODULES宏来查找cairo和poppler库.我不知道如何以这样的方式安装它们,以帮助它找到它们.

c++ pdf cmake openscenegraph cairo

6
推荐指数
1
解决办法
3443
查看次数

在AthensTutorial中画布来自哪里?

我正在做雅典教程,我理解第一步

surface := AthensCairoSurface extent: self extent asIntegerPoint.
Run Code Online (Sandbox Code Playgroud)

然后第2步是

surface drawDuring: [:canvas |

"First, we clear the surface"
surface clear. 

"we can use 

surface clear: Color black.  

as well. A #clear is equivalent to: (surface clear: Color transparent).   "

"Let''s draw a simple green rectangle"
canvas setPaint: Color green.
canvas setShape: (40@40 corner: 100@100).
canvas draw.

]
Run Code Online (Sandbox Code Playgroud)

帆布来自哪里?在哪里定义?我只是不明白那一部分.

graphics smalltalk pharo cairo athens

6
推荐指数
1
解决办法
123
查看次数

在 Cairo Surface 之前创建 Pango 布局

在我的应用程序中,我使用 Pango 和 Cairo 来创建文本纹理。这些纹理的宽度是固定的,但应缩放其高度以适合文本内容。然后,涉及这种情况的父对象将缩放其高度以匹配文本。

问题是,我初始化 Pango 和 Cairo 的方式不允许这样做。目前,该系统的设置是:

cairo_surface_t* cairoSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, sizeX, sizeY );
cairo_t* cairoContext = cairo_create( cairoSurface );
PangoLayout* pangoLayout = pango_cairo_create_layout( cairoContext );
Run Code Online (Sandbox Code Playgroud)

这固定了高度,至少是表面的高度——这是我不想做的事情,至少不是一直如此。

我的理解是,如果不指定布局高度,它会自动缩放高度,然后可以通过 找到pango_layout_get_size()。我想首先创建布局,然后使用此函数的输出来创建表面。

但是,pango_cairo_create_layout()需要已经创建表面,并且我一直无法找到通过开罗渲染布局的方法pango_layout_new()。API 文档中的渲染函数之一pango_cairo_update_layout(),指定pango_cairo_create_layout()必须用于创建布局;然而,更重要的功能,pango_cairo_show_layout(),没有这样的要求,我不确定这是否意味着允许任何 Pango 布局。虽然我可以测试它是否有效,但我担心反复试验可能会导致我出现未定义的行为。

我觉得我陷入了先有鸡还是先有蛋的困境,Pango 的文档主要是 API 参考,几乎没有解释该库的用途。有没有办法正确地做到这一点?

c++ text pango cairo pangocairo

6
推荐指数
1
解决办法
2066
查看次数

让 cairosvg 在 Windows 中工作

试图让这段代码工作:

import cairosvg
import os

path = "D:/PyProjects/Bla/Temp"
os.chdir(path)

cairosvg.svg2pdf(url='Pic.svg', write_to='image.pdf')
Run Code Online (Sandbox Code Playgroud)

但是遇到类似于这篇文章的错误:

Traceback (most recent call last):
  File "D:/work/lean_python/pdf/other.py", line 2, in <module>
    import cairosvg
  File "D:\env_python352\lib\site-packages\cairosvg\__init__.py", line 29, in <module>
    from . import surface
  File "D:\env_python352\lib\site-packages\cairosvg\surface.py", line 24, in <module>
    import cairocffi as cairo
  File "D:\env_python352\lib\site-packages\cairocffi\__init__.py", line 46, in <module>
    cairo = dlopen(ffi, 'cairo', 'cairo-2')
  File "D:\env_python352\lib\site-packages\cairocffi\__init__.py", line 43, in dlopen
    raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to …
Run Code Online (Sandbox Code Playgroud)

python gtk cairo pycairo

6
推荐指数
2
解决办法
4838
查看次数

是否可以使用 Cairo 图形设备通过 ggsave 创建 .eps 文件?

编辑:此页面提供代码:https : //www.andrewheiss.com/blog/2017/09/27/working-with-r-cairo-graphics-custom-fonts-and-ggplot/

ggsave("test_cario.eps", device=cairo_ps)

ggsave("test_cario.pdf", device=cairo_pdf)
Run Code Online (Sandbox Code Playgroud)

但是,我想知道命令来自哪里。它们未包含在官方文档 ( https://ggplot2.tidyverse.org/reference/ggsave.html )的可能设备列表中。并且,cairo_png 不存在;相反, type="cairo-png" 是必要的,例如:

ggsave("test_cairo.png", type = "cairo-png")
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么争论是一次device = ""又一次type = ""


我试过这样的代码

ggsave("model.eps", type = "cairo")
Run Code Online (Sandbox Code Playgroud)

或者

ggsave("model.eps", type = "cairo-ps")

或者

ggsave("model.eps", device = "cairo-ps")

但似乎没有任何效果。一般来说,是否可以使用 Cairo 图形设备通过 ggsave 创建 .eps 文件?如果是这样,如何?

r eps cairo ggplot2

6
推荐指数
1
解决办法
2934
查看次数

gnuplot pdfcairo 匹配乳胶字体大小

我使用带有 pdfcairo 终端的 gnuplot 5.0 绘制 pdf 图,然后使用 Latex 将该图插入到 pdf 文件中。然而,我发现gunplot中的字体大小与latex中的字体大小不同,尽管我将它们设置为相同。

为了使gnuplot和latex中的字体大小一致,我必须将gnuplot中的字体比例设置为0.75,如以下代码所示。

gnuplot 代码:用蓝色绘制“A”(Helvetica,大小 12,字体比例 0.75)。

set terminal pdfcairo font 'Helvetica,12' size 1cm,1cm fontscale 0.75
set output 'test0.pdf'
set xrange [-1:1]
set yrange [-1:1]
unset xtics
unset ytics
unset border
set label 'A' at 0,0 textcolor 'blue'
p 1/0 notitle
Run Code Online (Sandbox Code Playgroud)

Latex 代码:按原始大小插入前一个数字,并在前一个“A”旁边写一个黑色“A”(Helvetica,尺寸 12)。

\documentclass[12pt]{standalone}
\usepackage{tikz}
\usepackage{helvet}
\usepackage{graphicx}
\begin{document}
\begin{tikzpicture}
\node at (0,0) {\includegraphics{test0.pdf}};
\node at (0.3, -0.025) {\textsf{A}};
\end{tikzpicture}
\end{document}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看最终的 pdf 文件。现在我们可以看到,在 gnuplot 设置“fontscale 0.75”下,这两个“A”的大小完全相同。我不明白为什么在 gnuplot 中应该使用“fontscale …

latex gnuplot cairo

6
推荐指数
1
解决办法
2983
查看次数

如何在 GTK+3 的 gtk 窗口中创建 cairo 对象

我正在尝试使用 cairo 绘制一些弧线,但 gcc 警告我gdk_cairo_create() is deprecated. Use gdk_window_begin_draw_frame() and gdk_drawing_context_get_cairo_context() instead

为了解决这个问题,我做了一些研究,发现对于 gdk_window_begin_draw_frame() 我需要“GdkWindow”。我一直在我的窗口中使用 GtkWidget,所以我需要将“GtkWidget”转换为“GdkWindow”,但 gtk_widget_get_window() 返回NULL 并导致段错误。

#include <gtk/gtk.h>
#include <cairo.h>
void main(int argc , char **argv){
    gtk_init(&argc , &argv);
    GtkWidget *win;
    GdkWindow *gdkwin;
    GdkDrawingContext *dc;

    cairo_region_t *region;

    cairo_t *cr;


    win = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    region = cairo_region_create();

    gdkwin = gtk_widget_get_window(GTK_WIDGET(win));

    //Here gdkwin should contain a GdkWindow but it's NULL.

    gc = gdk_window_begin_draw_frame(gdkwin , (const cairo_region_t*)&region);
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

这是运行时错误:

(a.out:6852): Gdk-CRITICAL **: 23:53:06.042: gdk_window_begin_draw_frame: assertion 'GDK_IS_WINDOW (window)' failed …
Run Code Online (Sandbox Code Playgroud)

c gtk cairo

6
推荐指数
1
解决办法
4541
查看次数

无法加载库 libcairo

尝试在 Django 中运行网站时遇到问题:

OSError: no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': /lib/x86_64-linux-gnu/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var
cannot load library 'libcairo.so': /lib/x86_64-linux-gnu/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var
cannot load library 'libcairo.2.dylib': libcairo.2.dylib: cannot open shared object file: No such file or directory
cannot load library 'libcairo-2.dll': libcairo-2.dll: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

虽然安装了包。

我已经安装了 weasyprint

pip3 install weasyprint

python -m pip install WeasyPrint




  sudo apt-get install build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 …
Run Code Online (Sandbox Code Playgroud)

python django cairo weasyprint

6
推荐指数
1
解决办法
5577
查看次数

使用 cairo 在轴标题中保存带有表达式和 unicode 的 ggplot

我想保存以下情节:

library(ggplot2)

myplot <- ggplot(iris) +
  geom_point(aes(x = Sepal.Width, y = Sepal.Length)) +
  ylab(expression(~delta^13*C~"[\211]"))

ggsave(myplot, 
       filename = "myplot.png", 
       type = "cairo")
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

Error in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y,  : 
  Metric information not available for this family/device
Run Code Online (Sandbox Code Playgroud)

问题一定是表达式和​​ unicode 的组合,因为这两者可以工作:

myplot <- ggplot(iris) +
  geom_point(aes(x = Sepal.Width, y = Sepal.Length)) +
  ylab("[\211]")

myplot <- ggplot(iris) +
  geom_point(aes(x = Sepal.Width, y = Sepal.Length)) +
  ylab(expression(~delta^13*C))
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

编辑:我想打印“千分之一”符号。显然它的unicode是U2030,我错误地认为“\211”是一个unicode,但一定是别的东西。

编辑2:与此同时,我发现这个问题也有类似的问题。在那里,一个建议是用 保存情节encoding = "MacRoman",不幸的是这对我不起作用:

Error in png_dev(..., res = …
Run Code Online (Sandbox Code Playgroud)

r cairo ggplot2

6
推荐指数
1
解决办法
1063
查看次数

AVFrame 的正确 RGB 值

我必须从开罗表面像素数据填充 ffmpeg AVFrame->data。我有这个代码:

/* Image info and pixel data */
width  = cairo_image_surface_get_width( surface );
height = cairo_image_surface_get_height( surface );
stride = cairo_image_surface_get_stride( surface );
pix    = cairo_image_surface_get_data( surface );

for( row = 0; row < height; row++ )
{
    data = pix + row * stride;
    for( col = 0; col < width; col++ )
    {
        img->video_frame->data[0][row * img->video_frame->linesize[0] + col] = data[0];
        img->video_frame->data[1][row * img->video_frame->linesize[1] + col] = data[1];
        //img->video_frame->data[2][row * img->video_frame->linesize[2] + col] = data[2];
        data += …
Run Code Online (Sandbox Code Playgroud)

rgb ffmpeg cairo libavcodec libav

6
推荐指数
1
解决办法
974
查看次数

标签 统计

cairo ×10

c++ ×2

ggplot2 ×2

gtk ×2

python ×2

r ×2

athens ×1

c ×1

cmake ×1

django ×1

eps ×1

ffmpeg ×1

gnuplot ×1

graphics ×1

latex ×1

libav ×1

libavcodec ×1

openscenegraph ×1

pango ×1

pangocairo ×1

pdf ×1

pharo ×1

pycairo ×1

rgb ×1

smalltalk ×1

text ×1

weasyprint ×1