标签: pycairo

如何在不知道4分的情况下绘制曲线?

根据cairo示例代码,以下代码

double x=25.6,  y=128.0;
double x1=102.4, y1=230.4,
       x2=153.6, y2=25.6,
       x3=230.4, y3=128.0;

cairo_move_to (cr, x, y);
cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);

cairo_set_line_width (cr, 10.0);
cairo_stroke (cr);

cairo_set_source_rgba (cr, 1, 0.2, 0.2, 0.6);
cairo_set_line_width (cr, 6.0);
cairo_move_to (cr,x,y);   cairo_line_to (cr,x1,y1);
cairo_move_to (cr,x2,y2); cairo_line_to (cr,x3,y3);
cairo_stroke (cr);
Run Code Online (Sandbox Code Playgroud)

可以生成曲线和两条粉红色的线条.

在此输入图像描述

但那需要4个点,(x,y),(x1,y1),(x2,y2),(x3,y3)

如果我只有x,y和x3,y3(曲线的起点和终点),是否有任何数学公式可以生成那些粉红色的线而不知道x1,y1和x2,y2?

编辑:

它适用于我通过以下方式生成曲线的情况.

cairo_move_to (cr, x, y);
cairo_curve_to (cr, x, y3, x3, y, x3, y3);
Run Code Online (Sandbox Code Playgroud)

cairo pycairo

3
推荐指数
1
解决办法
1352
查看次数

如何让Pango Cairo正确包装?

我在让Pango Cairo自言自语方面遇到了问题.下面是一些演示代码.我将布局的宽度设置为与红色矩形相同,所以我希望它包裹到红色矩形.实际上,它只是在每一行上放置一个单词,就好像宽度设置得非常小.如果我使用pango.WRAP_WORD_CHAR,我只能获得一行字符.

我究竟做错了什么?如何将布局包装到我指定的宽度?

编辑如果我将宽度设置为100000,则单词正确包装.这意味着set_width和构造参数使用不同的单位.有任何想法吗?

# -*- coding: utf-8 -*-
import sys

import cairo
import pango
import pangocairo

SIZE = 200
HALF = 100
QUARTER = 50

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, SIZE, SIZE)

context = cairo.Context(surface)
context.set_source_rgb(1, 0, 0)
context.rectangle(QUARTER, QUARTER, HALF, HALF)
context.fill()

context.set_source_rgb(1, 1, 0)

context.translate(QUARTER, QUARTER)

pangocairo_context = pangocairo.CairoContext(context)
layout = pangocairo_context.create_layout()

layout.set_width(HALF)
layout.set_alignment(pango.ALIGN_LEFT)
layout.set_wrap(pango.WRAP_WORD)
layout.set_font_description(pango.FontDescription("Arial 10"))
layout.set_text("The Quick Brown Fox Jumps Over The Piqued Gymnast")


pangocairo_context.update_layout(layout)
pangocairo_context.show_layout(layout)

context.show_page()

with file("test.png", "w") as op:
    surface.write_to_png(op)
Run Code Online (Sandbox Code Playgroud)

自动换行

pango cairo pycairo pangocairo

3
推荐指数
1
解决办法
2267
查看次数

交换numpy数组的子数组

首先是一些背景.

我试图用开罗(实际上是pycairo)绘制一个Gdk(实际上是pygtk)pixbuf.我原来的代码看起来像这样:

import cairo as C
import gtk.gdk as GG

FMT = C.FORMAT_ARGB32
CSP = GG.COLORSPACE_RGB

st = C.ImageSurface.format_stride_for_width(FMT, zw)
surf = C.ImageSurface(FMT, zw, zh)
c = C.Context(surf)

# draw into c here ...

pixels = surf.get_data()
return GG.pixbuf_new_from_data(pixels, CSP, True, 8, zw, zh, st)
Run Code Online (Sandbox Code Playgroud)

有一段时间,看起来这只会起作用,直到我试图绘制颜色而不仅仅是黑色文本.事实证明两个库在字节顺序上不一致,如下所示:

# !!! FIXME !!! cairo ARGB surfaces and gdk pixbufs disagree on bytesex:
# cairo: LSB --> B G R A <-- MSB
# gdk:   LSB --> R G B A <-- MSB
# …
Run Code Online (Sandbox Code Playgroud)

python pygtk numpy pycairo

3
推荐指数
1
解决办法
2146
查看次数

PyCairo - 在Windows上安装

我看到这里有一个类似的问题.
所以我已经做了一些研究,请不要像那样关闭我的问题.

如何在Windows上安装PyCairo(Cairo for Python)?

从2012年开始,我猜它已经过时了.

我正在尝试在安装了Python 3.6.3的Windows 7 64位笔记本电脑上安装pycairo.如果重要的话,我还安装了最新的setuptools.

我正面临下面的错误.

C:\Programs\Python36>python
Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ^Z


C:\Programs\Python36>pip install pycairo
Collecting pycairo
  Using cached pycairo-1.15.4.tar.gz
Installing collected packages: pycairo
  Running setup.py install for pycairo ... error
    Complete output from command c:\programs\python36\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\petr
op01\\AppData\\Local\\Temp\\pip-build-vbfoifen\\pycairo\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().
replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\petrop01\AppData\Local\Temp\
pip-rrp9zlme-record\install-record.txt --single-version-externally-managed --compile:
    running …
Run Code Online (Sandbox Code Playgroud)

python pycairo

3
推荐指数
1
解决办法
1万
查看次数

如何使用 Pycairo 输出透明的 PNG?

这是我的代码:

进口开罗
导入操作系统
从 PIL 导入图像

图像大小 = (512,128)
表面 = cairo.ImageSurface(cairo.FORMAT_ARGB32, *imagesize)

cr = cairo.Context(表面)

cr.select_font_face("Verdana", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
cr.set_font_size(24)
cr.set_source_rgb(1, 1, 1)

...

surface.write_to_png("MyImage.png")

如您所见,我正在为此 PNG 绘制一些白色文本,但背景默认为不透明的黑色。如何使 png 透明,以便只显示白色文本?

transparency image python-imaging-library pycairo

2
推荐指数
1
解决办法
3391
查看次数

AttributeError: 'module' 对象没有属性 'cairo_font_map_get_default'

如果我尝试从 cairo 网站运行此示例,则会得到:

AttributeError: 'module' object has no attribute 'cairo_font_map_get_default'
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些包裹?(我在 Ubuntu 14.04 上)

但是,我试图找到我需要的开发包,我找到的唯一答案是this,它从 GTK2 堆栈中推荐了一些东西,但如果有的话,我对 GTK3 感兴趣,而不是 2。

python pango cairo pycairo pangocairo

2
推荐指数
1
解决办法
1081
查看次数

d3.js nice()ticks背后的逻辑是什么

我在d3.js中生成了一些图表.我使用下面的代码来计算放在y轴上的值,它就像一个魅力.

var s = d3.scale.linear().domain([minValue, maxValue]);
var ticks = s.nice().ticks(numberOfPoints);
Run Code Online (Sandbox Code Playgroud)

但是我现在必须使用pycairo编写python代码,pycairo在服务器端生成d3.js图表​​的克隆.

我的问题是,是否有人知道上面代码中使用的逻辑,或者可以给出类似结果的东西,以便我可以在python中复制它以获得在y轴中使用的漂亮值?

javascript python charts pycairo d3.js

2
推荐指数
1
解决办法
9812
查看次数

安装 Cairo 和 PyCairo Mac OsX

我正在使用 python iGraph 进行网络可视化。当我尝试绘制图形时,我收到了他的错误消息:

>>> layout = g.layout("kk")
>>> plot(g, layout = layout)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.macosx-10.5-x86_64/egg/igraph/drawing/__init__.py", line 446, in plot
  File "build/bdist.macosx-10.5-x86_64/egg/igraph/drawing/__init__.py", line 117, in __init__
  File "build/bdist.macosx-10.5-x86_64/egg/igraph/drawing/utils.py", line 396, in __getattr__
TypeError: plotting not available
Run Code Online (Sandbox Code Playgroud)

我认为我没有正确安装 Cairo 或 PyCairo。

我不熟悉使用 Fink 或 MacPorts,因为我通常使用 Homebrew。

非常感谢您的任何帮助。

cairo igraph pycairo

2
推荐指数
1
解决办法
6131
查看次数

如何在其绘制信号处理程序中获取 GtkDrawingArea 的无效区域

GtkDrawingArea 的参考手册中,它说

\n\n
\n

当绘图区域第一次出现在屏幕上时,或者当它被另一个窗口覆盖然后又被覆盖时,通常会传递绘图信号。您还可以通过添加到绘图区域\xe2\x80\x99s窗口的​​\xe2\x80\x9cdamage区域\xe2\x80\x9d来强制暴露事件;gtk_widget_queue_draw_area()并且gdk_window_invalidate_rect()都是同样好的方法来做到这一点。然后,您\xe2\x80\x99将获得无效区域的绘制信号。

\n
\n\n

那么我怎样才能在绘制信号的处理程序中获取无效区域呢?\n它是剪辑区域吗?

\n

gtk cairo pygobject pycairo gtk3

2
推荐指数
1
解决办法
453
查看次数

使用 GTK3 和 pycairo 的 Python3 动画

我正在尝试使用 GTK3 库和 pycairo 在 python3 中制作一些简单的动画。

我一直试图找到简单的单文件示例但无济于事,但我确信它是可行的。

我找到的最接近的是:https://cairographics.org/cookbook/animationrotation/,但这是在 python2 中,库/依赖项完全不同。

有没有人能指点我一个体面的来源,或对上述代码的修改?

谢谢!

gtk pygtk cairo pycairo python-3.x

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