我有一个图像/ pixbuf,我想绘制到gtk.DrawingArea并经常刷新,所以blitting操作必须快.这样做很简单:
def __init__(self):
self.drawing_area = gtk.DrawingArea()
self.image = gtk.gdk.pixbuf_new_from_file("image.png")
def area_expose_cb(self, area, event):
self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)
Run Code Online (Sandbox Code Playgroud)
然而,导致性能非常慢,可能是由于pixbuf不是显示器颜色格式.
我也没有在开罗取得成功,因为它似乎仅限于24/32位格式,并且没有16位格式(FORMAT_RGB16_565不受支持和弃用).
在Gtk +中快速绘制图片有哪些替代方案?
似乎pycairo在5月份分为2.x版本的py2cairo.py2cairo没有pip或easy_install安装选项.我抓住了最新的py2cairo tar,以及注册为依赖项的cairo 1.8.10软件包.当我尝试首先配置cairo时,它最终会出错,它需要pkg-config.但是,我也找不到pip或easy_install中的pkg-config安装选项.我完全失去了如何安装py2cairo.我在Mac Snow Leopard上这样做.
我在Windows 7平台上运行python脚本时遇到了一些麻烦.我已经安装了Python和cairo,最后一个使用"pip".我正在使用此命令运行脚本:
C:\Python34>python.exe label/make_label.py
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Traceback (most recent call last):
File "label/make_label.py", line 6, in <module>
import cairocffi as cairo
File "C:\Python34\lib\site-packages\cairocffi\__init__.py", line 41, in <modul
e>
cairo = dlopen(ffi, *CAIRO_NAMES)
File "C:\Python34\lib\site-packages\cairocffi\__init__.py", line 34, in dlopen
return ffi.dlopen(names[0]) # pragma: no cover
File "C:\Python34\lib\site-packages\cffi\api.py", line 118, in dlopen
lib, function_cache = _make_ffi_library(self, name, flags)
File "C:\Python34\lib\site-packages\cffi\api.py", line 411, in _make_ffi_libra
ry
backendlib = _load_backend_lib(backend, libname, flags)
File "C:\Python34\lib\site-packages\cffi\api.py", line 400, in _load_backend_l
ib
return backend.load_library(name, flags)
OSError: cannot load …Run Code Online (Sandbox Code Playgroud) 我正在 ubuntu 18.04 上运行 weasyprint 项目,并尝试创建 aa pdf。
当我尝试设置页脚图像时,问题就开始了。我正在 python 3.6.7 上运行
这是我调用 weasyprint 的代码:
import sys
import os
from weasyprint import HTML, CSS
htmlFile = sys.argv[1]
pdfFile = sys.argv[2]
html = HTML(filename=htmlFile)
css = CSS(string='@page { @bottom-center { width: 125%; margin-top: 10px; content: " "; background-image: url(file://' + os.getcwd() + '/pdf/footer.png); background-repeat: no-repeat; background-position: right; background-size: 100%; } }')
html.write_pdf(pdfFile, stylesheets=[css])
Run Code Online (Sandbox Code Playgroud)
但后来我收到以下错误:
Error: Command failed: python3 /node_modules/my-project/python/run.py /node_modules/my-project/pdf/catalog_01e299a3-1fca-482b-a512-e1bea832559f.html /node_modules/my-project/pdf/catalog_01e299a3-1fca-482b-a512-e1bea832559f.pdf
Traceback (most recent call last):
File "/node_modules/my-project/python/run.py", line 3, in …Run Code Online (Sandbox Code Playgroud) 我正在使用 GitHub Actions 测试 R 包,它在 Windows 和 Linux 上成功。
但是,它在 Mac OS 上失败,正如您在日志中看到的那样:
Warning in grSoftVersion() :
unable to load shared object '/Library/Frameworks/R.framework/Resources/modules//R_X11.so':
dlopen(/Library/Frameworks/R.framework/Resources/modules//R_X11.so, 6): Library not loaded: /opt/X11/lib/libSM.6.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/4.0/Resources/modules/R_X11.so
Reason: image not found
Warning in cairoVersion() :
unable to load shared object '/Library/Frameworks/R.framework/Resources/library/grDevices/libs//cairo.so':
dlopen(/Library/Frameworks/R.framework/Resources/library/grDevices/libs//cairo.so, 6): Library not loaded: /opt/X11/lib/libXrender.1.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/4.0/Resources/library/grDevices/libs/cairo.so
Reason: image not found
Warning in png(filename = file, width = width, height = height, units = "in", :
failed to load …Run Code Online (Sandbox Code Playgroud) 我有一些音乐乐队的专辑标题.我想用一些将围绕图像角落的面具绘制它.所以,我在gimp中准备了这样的面具:

我正在使用白色面具,但在白色背景下它是隐形的.所以,这是渲染的代码:
# Draw album image
img = cairo.ImageSurface.create_from_png('images/album.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()
# Draw mask
ctx.set_operator(cairo.OPERATOR_DEST_IN)
img = cairo.ImageSurface.create_from_png('images/mask.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()
Run Code Online (Sandbox Code Playgroud)
如你所见,我已经习惯了OPERATOR_DEST_IN.我在此页面上找到的快速示例.
但是,当我在cairo中设置合成运算符时,我的程序中的一切都消失了:(.当我评论该行时,一切都没问题,但是掩码超出了我的图像.正确的方法是什么?
ps我正在使用python2,cairo库
当我删除合成操作符时,我看到(不要忘记真正的蒙版是白色的,在这种情况下专辑图像是暗的):

社区.
我知道这里有很多答案,手册,教程和互联网上的参考资料,并且更多关于这个问题.我也知道线性代数的知识是必需的.但是,当我想到时间去理解所有的理论并在实践中解决练习时 - 我的头脑正在吹走,我不能做最简单的事情:(
如果你知道一个快速的解决方案,如何在渲染之前将文本旋转到其中心,请告诉我,pleeease.
现在我有:
#...
cr.move_to(*text_center)
myX, myY = text_center[0] - (width / 2), text_center[1] + (height / 2)
cr.save()
cr.translate(myX, myY)
cr.rotate(radians(text_angle))
cr.show_text(letter)
cr.restore()
#...
Run Code Online (Sandbox Code Playgroud)
但是我的信并没有绕着自己转动.这就像倒在右边:(我知道我的代码不对.也许我想念转型,但我不知道怎么做对.
更新:不幸的是,文本不受翻译的影响,所以
cr.translate(10000, 10000)
cr.rotate(radians(15))
cr.show_text("hello")
Run Code Online (Sandbox Code Playgroud)
将完全相同
cr.rotate(radians(15))
cr.show_text("hello")
Run Code Online (Sandbox Code Playgroud)
而且我不知道如何在没有新表面或其他东西(如图形处理器中的新图层)的情况下在其中心上进行文本旋转:(
我开始在Mono框架下为Linux编写一个小应用程序,该应用程序本质上是一个小型的kiosk前端,用户交互非常少.这是为了替换基于100%文本/控制台的同一应用程序的先前版本.
由于这将在Raspberry Pi上运行,我想避免运行X并让我的应用程序直接与Framebuffer通信.我开始使用Mono框架和C#作为我的开发语言,因为我非常了解C#.在这种情况下,可移植性不是问题.
我在查找适当的库和绑定时遇到了一些麻烦,让我从Mono访问Framebuffer.这些GTK#库都明确绑定到X11接口,无论如何,在Debian Wheezy中似乎没有为ARM Soft-Float(armel)架构预构建的GtkFB库.
该Mono.Cairo库公开了一个DirectFBSurface类型,但是该表面的构造函数有两个IntPtr参数而没有记录,因此我不知道应该将什么传递给构造函数以正确初始化Framebuffer作为Cairo Surface.
有没有人使用Mono和C#与Linux Framebuffer交谈,如果是这样,你能提供基本的例子来初始化并开始绘制到FB,或者指向在线文档来提供帮助吗?
更新1
我想我会尝试null使用以下代码为两个构造函数参数实例化DirectFBSurface :
public static void Main(string[] args)
{
// ...
DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
// ...
}
Run Code Online (Sandbox Code Playgroud)
我希望这会生成一个异常,表明null不允许参数值,但是看起来好像DirectFBSurface没有实现Mono.Cairo或没有编译到Debian Wheezy(armel)附带的库中:
Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create
at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr)
at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0
at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
Run Code Online (Sandbox Code Playgroud)
所以看起来这种Mono.Cairo方法可能无法满足我的需求,如上所述,GTK#Framebuffer库似乎不是Armel的Debian Wheezy的一部分.是否有另一组库可用于从Mono访问Linux Framebuffer?
我是cairo的新手,并且已阅读其网站上的教程/文档。现在,我可以制作线条,矩形,基本上可以渲染图像,但不能渲染文本。
我正在使用以下代码
cairo_select_font_face (cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAl);
cairo_set_font_size (cr, 14);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_move_to (cr, 50, 50);
cairo_show_text (cr, "Print Something");
Run Code Online (Sandbox Code Playgroud)
有人可以指出我的错误吗?
我想测试weasyprint但它在安装pangocairo.
我成功安装了 weasyprint:
pip install weasyprint
Run Code Online (Sandbox Code Playgroud)
我还设置了 gtk\bin 的路径。
$weasyprint
Traceback (most recent call last):
File "c:\root\python27\lib\runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "c:\root\python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "c:\root\python27\scripts\weasyprint.exe\__main__.py", line 5, in <module>
File "c:\root\python27\lib\site-packages\weasyprint\__init__.py", line 336, in <module>
from .css import PARSER, preprocess_stylesheet # noqa
File "c:\root\python27\lib\site-packages\weasyprint\css\__init__.py", line 30, in <module>
from . import computed_values
File "c:\root\python27\lib\site-packages\weasyprint\css\computed_values.py", line 18, in …Run Code Online (Sandbox Code Playgroud) cairo ×10
python ×7
pycairo ×2
c# ×1
composite ×1
dll ×1
easy-install ×1
framebuffer ×1
graphics ×1
gtk ×1
gtk# ×1
image ×1
macos ×1
mono ×1
pip ×1
pygtk ×1
python-2.7 ×1
r ×1
rotation ×1
ubuntu-18.04 ×1
weasyprint ×1
windows ×1
x11 ×1