问题标签 [cairo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3292 浏览

c - 用开罗图形绘制多个矩形

我正在尝试编写一个开罗程序来将整个图像填充为黑色,然后在其中绘制另一个矩形以不同的颜色。最后,我将把它做成一个程序,生成一个看起来像数字时钟的当前时间的 .png。现在,这就是我要挂断电话的地方。

这是我的代码:

问题在于这段代码它绘制矩形以占据整个图像,而从 printf 中它应该只占据一小部分。有谁知道我怎样才能让这个矩形显示为正确的大小?

0 投票
1 回答
787 浏览

c++ - Cario 的文本区域:OpenGL

是否有现成的 textarea 类使用 Cario(以 OpenGL 为目标)作为渲染器?

通过文本区域,我的意思是具有自动换行和宽度和高度约束的多行文本字段。需要使用这个类的代码是用 C++ 编写的。

0 投票
2 回答
441 浏览

python - 在 OS-X 上将 Cairo Surface 转换为 Pygame 的最快方法

我正在寻找一种在 Python 中绘制平滑动画的方法。我想使用 cairo,部分原因是我喜欢亚像素过滤,部分原因是我熟悉 API。我的第一种方法是使用 GTK.DrawingArea 作为 cairo 表面的目标。虽然绘图很快,但我找不到任何可靠的方法来将显示/缓冲与垂直同步联系起来,因此动画很不稳定且不可靠。

我的下一个方法是尝试 PyGame。使用wiki中的示例作为起点,我编写了一些简单的代码来制作各种弹跳球的动画。链接页面上的不同方法分为两类:

  1. 绘制到屏幕外的 cairo ImageSurface,然后使用 Numpy 将像素缓冲区转换为 Pygame 表面。
  2. 两个表面共享相同的内存

第一种方法的性能很差,因为转换大约需要 10 毫秒,这是我对 60 赫兹帧的大部分时间片。我在具有 2.2Ghz Core2Duo 和 Nvidia 8400 的 Macbook-pro 上运行代码。时间很大程度上取决于表面的大小,这是针对 800x800 窗口的。

第二种方法来自像素坐标的排序。cairo 和 pygame 都坚持只能使用 RGB 像素排序,不支持转换。问题是当我设置一个 pygame 表面时,它使用 BGRA 像素排序,这完全让我感到厌烦。

所以现在的问题:

  1. 是否可以更改 mac 上任一库使用的像素格式以相互兼容?
  2. 如果不可能,那么纯粹在 Python 中进行转换的最快方法是什么?
  3. 如果最快的 Python 方式仍然在大部分时间里占用一帧,那么我如何与一些 C 代码接口来进行转换?
  4. 根据 C 接口的复杂程度,使用 pygame 而不是只用 C 编写 SDL 接口有多大意义?

.

0 投票
3 回答
3947 浏览

python - python中的SVG与cairo、opengl和rsvg的交互

我使用 Cairo、OpenGL 和 rsvg 渲染了一个包含大量元素的巨大 SVG 文件。我通过 rsvg 在 cairo 表面绘制 svg 并创建一个 OpenGL 纹理来绘制它。一切都很好。现在我必须与来自 SVG 的元素进行交互。例如,我想通过坐标猜测一个元素。我想改变SVG中一些路径的背景。我认为在改变背景的情况下,我可以改变 SVG DOM 并以某种方式重新渲染 SVG 的一部分。但是在命中测试元素的情况下,我完全感到尴尬。

那么,是否有一些 python 库可以与 SVG 交互?是否可以继续使用 cairo 和 rsvg,我该如何自己实施?或者有没有更好的方法在 OpenGL 中渲染 SVG 并在 python 中与之交互?我想要的只是加载 SVG,操作它的 DOM 并渲染它

0 投票
3 回答
2831 浏览

python - 开罗背景和持久性?

我刚刚开始使用 pycairo,遇到了以下有趣的错误。我编写的程序创建了一个简单的 gtk 窗口,在其上绘制一个矩形,然后有一个回调在任何类型的键盘输入上绘制一条随机线。但是,似乎对于每个键盘输入,我都必须创建一个新的上下文,或者在程序接收到第一个键盘输入的那一刻(特别是在 .stroke() 行上)出现错误。错误如下,如果重要的话。'BadDrawable(无效的像素图或窗口参数)'。(详情:serial 230 error_code 9 request_code 53 minor_code 0)

谢谢你的帮助!

(更新:我在玩,我意识到以下几点:当我调整窗口大小时,所有添加的新对象都会被删除(或者至少不再出现?))

0 投票
3 回答
1949 浏览

macos - 将 Macports 库链接到 XCode 应用程序

我正在尝试将我的应用程序的依赖项与应用程序一起分发。

我在我的 Snow Leopard 系统上安装了仅 64 位的 macports 包 librsvg、boost 和 cairo。当我为我的程序创建一个 .app 包时,它在没有安装 macport 和相关库的机器上不起作用,因为它们不包含在应用程序中,该应用程序在 /opt 中搜索库。

我已经尝试使用 --static 标志进行静态链接,但这会导致 libcrt0 错误。

将 MacPorts 库及其依赖项链接到适合单独分发的 OSX 应用程序的最佳方法是什么?

0 投票
2 回答
3448 浏览

c++ - 在 iPhone 上使用开罗?

我正在开发一个潜在的跨平台 C++ 应用程序,对于 Windows 和 OS X,Cairo 似乎可以满足我对 2D 图形的大部分需求,并允许我在平台之间共享大量代码。在一个理想的世界中,我真的希望能够在 iPhone/iPad 应用程序中使用相同(或非常相似)的绘图代码。

我意识到这意味着在我尝试使用它之前我需要为 iPhone 编译 Cairo,但我对如何去做这件事并没有真正的想法。

如果有人能指出我正确的方向,我将不胜感激。

0 投票
1 回答
779 浏览

c++ - 用中心点和比例因子转换顶点?

我的应用程序是矢量绘图应用程序。它适用于 OpenGL。我将对其进行修改以使用 Cairo 2D 图形库。问题在于缩放。使用 openGL 相机和比例因子可以像这样工作:

鼠标位置是这样获得的:

从那里我画出三角形的 VBO。这使我可以平移和放大。鉴于 Cairo 只能基于坐标进行绘制,我如何才能在不使用变换的情况下正确缩放和平移顶点。基本上 GlOrtho 通常会设置视口,但我认为我不能在 Cairo 上做到这一点。

好吧,GlOrtho 能够更改视口矩阵而不是修改顶点,但是我怎样才能修改顶点以获得相同的结果呢?

谢谢

*给定从 ScreenToWorld 获得的顶点 P,我该如何修改它以便根据相机和比例因子对其进行缩放和平移?因为通常 OpenGL 基本上会这样做

0 投票
1 回答
423 浏览

c++ - Cairo Matrix 等同于 GlOrtho Matrix?

鉴于我做了这样的事情:

结果是:http ://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml我可以实现这样的矩阵:

http://cairographics.org/manual/cairo-matrix.html

我试过这个:

但它没有用。我怎样才能获得 GlOrtho 在开罗制作的相同矩阵?谢谢

0 投票
1 回答
336 浏览

c++ - 退出时的开罗错误消息

我目前正在使用 Cairo 进行一些测试,以替换 Visual C++ 2010 中的一些现有 GDI/GDI+ 代码,它似乎工作正常,但每次关闭我的应用程序时都会收到一条错误消息:

“CairoTest.exe 中 0x68e629dc 的第一次机会异常:0xC0000005:访问冲突读取位置 0xabababa7”

仅当我在应用程序运行时调用 cairo_paint(cr) 时才会发生此错误 - 如果我将此行注释掉,它就会消失。到目前为止,我的应用程序中唯一的开罗代码是:

谁能指出我做错了什么的方向?

就像我说的那样,代码似乎工作正常,但我不喜欢不管什么时候看到错误都继续努力。