标签: cairo

如何在linux系统上获得真实类型字符的字形轮廓

我正在寻找一个库来获取linux系统上真实字体的字形轮廓.我们正在使用PangoCairo但不幸的是我没有找到任何东西.我正在寻找类似于.NET下的GlyphTypeface.GetGlyphOutline的东西

任何帮助或提示表示赞赏!

提前致谢

linux pango truetype cairo

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

Python ctypes和librsvg出错

我正在尝试用Python的ctypes包装librsvg的基本功能,但我得到了一个段错误.

C:

// pycairo excerpt
typedef struct {
  PyObject_HEAD
  cairo_t *ctx;
  PyObject *base; /* base object used to create context, or NULL */
} PycairoContext;

// librsvg excerpt
RsvgHandle * rsvg_handle_new_from_file (const gchar * file_name, GError ** error);
// ...
gboolean rsvg_handle_render_cairo (RsvgHandle * handle, cairo_t * cr);
Run Code Online (Sandbox Code Playgroud)

Python ctypes:

from ctypes import *
from ctypes import util


librsvg = cdll.LoadLibrary('/brew/lib/librsvg-2.2.dylib')
libgobject = cdll.LoadLibrary('/brew/lib/libgobject-2.0.dylib')

libgobject.g_type_init()


class RSVGDimensionData(Structure):

    _fields_ = (
        ('width', c_int),
        ('height', c_int),
        ('em', c_double),
        ('ex', c_double)
    )

class …
Run Code Online (Sandbox Code Playgroud)

python ctypes cairo librsvg pycairo

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

使用Cairo绘图时,有什么方法可以加快/减少CPU使用率?

我写了一个使用Cairo在屏幕上绘制内容的应用程序(准确地说是在Gtk :: DrawingArea上).它需要经常重绘所有内容.事实证明,尽管绘制的字形非常简单,但X服务器在重绘时使用了大量的CPU,而且应用程序运行速度非常慢.有什么方法可以加快速度吗?或者也许我不应该使用DrawingArea和其他一些小部件?

我绘制的是一组矩形,用户可以通过鼠标拖动来移动它们.整个绘图是使用on_expose_event完成的,但是当鼠标指针移动时(按下按钮),我调用queue_draw()来刷新绘图.

c++ gtk gtkmm cairo

4
推荐指数
2
解决办法
2915
查看次数

汇编/链接到开罗图书馆

我试图测试一些简单的开罗程序,但我无法确定如何包含源文件.我已经安装了开罗图书馆 - 这只是一个如何让gcc知道的问题......

  • 我在/ usr/local/include/cairo中安装了.h文件(包括cairo.h)
  • 我在/ usr/local/lib和/ usr/local/lib/cairo中安装了.dylib文件

我应该注意安装的其他任何组件吗?(我刚刚'make install'来安装库)

我想像这样编译:

$ gcc cairoTest.c -I/usr/local/include/cairo -L/usr/local/lib/
Run Code Online (Sandbox Code Playgroud)

我的cairoTest.c文件以:

include <cairo.h>
Run Code Online (Sandbox Code Playgroud)

gcc正在查找cairo.h,但它给出了以下错误消息.我认为它没有正确链接到.dylib文件,但我不确定.我还是新编译/链接.

gcc cairoTest.c -I/usr/local/include/cairo -L/usr/local/lib/cairo
Undefined symbols for architecture x86_64:
  "_cairo_image_surface_create", referenced from:
      _main in ccVd9Pet.o
  "_cairo_create", referenced from:
      _main in ccVd9Pet.o
  "_cairo_scale", referenced from:
      _main in ccVd9Pet.o
  "_cairo_set_line_width", referenced from:
      _main in ccVd9Pet.o
  "_cairo_set_source_rgb", referenced from:
      _main in ccVd9Pet.o
  "_cairo_rectangle", referenced from:
      _main in ccVd9Pet.o
  "_cairo_stroke", referenced from:
      _main in ccVd9Pet.o
  "_cairo_surface_write_to_png", referenced from:
      _main in ccVd9Pet.o
  "_cairo_destroy", referenced from: …
Run Code Online (Sandbox Code Playgroud)

gcc compilation include cairo

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

如何使用Cairo和Gtk3在GtkDrawingArea中绘制一条线

有人可以告诉我一个最小的工作示例,使用C语言为开罗与Gtk3画一条线GtkDrawingArea.我试图修改testcairo.cGtk3测试文件夹,但我无法让它工作.请不要在开罗网站上推荐这些教程; Zetcode.com或gnome.org,它们不是与Gtk3一起使用,也不是最小的工作示例.

gtk cairo gtk3

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

GtkDrawingArea - 如何让它成为可绘制的?

我有点想到这里.

我正在尝试使用cairo在我的GTK表单上绘制一些简单的图形.

#include <stdio.h>
#include <gtk/gtk.h>
#include <cairo.h>

GtkWidget* window;
GtkWidget* darea; 


int main(int argc, char **argv)
{
    gtk_init(&argc, &argv);     
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 390, 240);

    darea = gtk_drawing_area_new();
    gtk_container_add(GTK_CONTAINER(window), darea); 

    cairo_t *cr; 
    cr = gdk_cairo_create(darea->window);
    cairo_rectangle(cr, 0, 0, 100, 100); 
    cairo_fill(cr);


    gtk_widget_show_all(window);

    gtk_main(); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这编译,但给了我

Gdk-CRITICAL**:IA__gdk_cairo_create:断言`GDK_IS_DRAWABLE(drawable)'失败

然后是段错误.

我一直在看这个教程

所以我按如下方式更改了代码,使得cairo调用发生在expose事件中.

    #include <stdio.h>
    #include <gtk/gtk.h>
    #include <cairo.h>

    GtkWidget* window;
    GtkWidget* darea; 

    static gboolean
    on_expose_event(GtkWidget *widget,
        GdkEventExpose *event,
        gpointer data)
    {
        cairo_t *cr; 
        cr = gdk_cairo_create(darea->window);
        cairo_rectangle(cr, 0, …
Run Code Online (Sandbox Code Playgroud)

gtk cairo

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

在PyGobject中绘图(python3)

我正在尝试使用PyGObject和python 3编写简单的图形编辑器.我需要使用鼠标绘制不同颜色和宽度的线条.我找到了许多像这样的例子,但没有更复杂.

如何在"绘制"事件之间保存绘制的图像?是否有增量绘图方式或是否必须在每个'draw'事件上重绘窗格?我发现我可以保存路径但是如何保存绘制线条的宽度和颜色?有没有办法在'draw'回调之外创建图像并且只在回调中应用(绘制)它?

就是我现在所拥有的.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gi.repository import Gtk, Gdk
import os

class App(object):

    main_ui = os.path.join(os.path.dirname(__file__), 'gui.glade')

    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_from_file(self.main_ui)

        self.main_window.connect('destroy', self.quit)
        self.mw_quit_button.connect('clicked', self.quit)

        self.mw_graph_editor_button.connect('clicked', self.show_window, self.graph_editor_window)
        self.graph_editor_window.connect('delete-event', self.hide_window_delete)

        self.ge_menubar_file_quit.connect('activate', self.hide_window, self.graph_editor_window)
        self.ge_toolbar_quit.connect('clicked', self.hide_window, self.graph_editor_window)

        self.ge_drawingarea.connect('motion-notify-event', self.pointer_motion)
        self.ge_drawingarea.connect('motion-notify-event', self.show_coordinates)
        self.ge_drawingarea.connect('draw', self.draw_callback)

        self.path = None
        self.coord = (0, 0)
        self.rgb = (0, 0, 0)

    def __getattr__(self, name):
        obj = self.builder.get_object(name)
        if not obj:
            raise AttributeError("Object {0} has no …
Run Code Online (Sandbox Code Playgroud)

python gtk cairo pygobject python-3.x

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

覆盖GTK工具栏/小部件

我正在使用GTK + 2.0和Cairo在C中编写自定义应用程序.仅用于学习目的(如果成功,然后用于部署),我希望重新创建类似于覆盖工具栏/窗口小部件(我很抱歉,如果术语不正确),当鼠标移动到窗口上的给定区域时出现,当鼠标移开时消失.正如我想象的那样,工具栏应该出现在现有小部件的顶部,而不会替换它们或以任何方式改变小部件包装.有可能完成吗?如果是,请您指出相关的教程/示例和/或概述一种方法来做同样的事情?提前致谢.

gtk overlay widget gtk2 cairo

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

使用pyCairo旋转图像

我无法理解如何使用pyCairo简单地旋转图像......

基于这个例子,这就是我所做的:

image_surface = cairo.ImageSurface.create_from_png(image_path)
width = image_surface.get_width()
height = image_surface.get_height()

context = cairo.Context(cairo.ImageSurface (cairo.FORMAT_ARGB32, width, height))

context.translate(width*0.5, height*0.5)
context.rotate(45.0*math.pi/180.0)
context.scale(1.0, 1.0)
context.translate(-width*0.5, -height*0.5)

context.set_source_surface(image_surface, 0, 0)
context.paint()

image_surface.write_to_png(output_path)
Run Code Online (Sandbox Code Playgroud)

输出图像与初始图像相同.我错过了什么?

python cairo pycairo

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

开罗图像缩放时模糊

我有以下开罗代码:

cairo_set_source_rgba(cr, 1, 1, 1, 1);
cairo_rectangle(cr, 0, 0, WINDOW_SIZE, WINDOW_SIZE);
cairo_fill(cr);
cairo_scale(cr, 8, 8);
draw_image(cr, "q.png", 5, 5);
Run Code Online (Sandbox Code Playgroud)

void draw_image(cairo_t* cr, char* img_name, int x, int y)
{
    cairo_translate(cr, x, y);
    cairo_surface_t* img = cairo_image_surface_create_from_png(img_name);
    cairo_set_source_surface(cr, img, 0, 0);
    cairo_paint(cr);
    cairo_translate(cr, -x, -y);
}
Run Code Online (Sandbox Code Playgroud)

q.png是5x5的图片: 在此处输入图片说明

但是在运行程序时,图像会稍微模糊:
在此处输入图片说明

我已经尝试过

cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

有什么办法可以解决这个问题?

c gtk cairo

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

标签 统计

cairo ×10

gtk ×6

python ×3

pycairo ×2

c ×1

c++ ×1

compilation ×1

ctypes ×1

gcc ×1

gtk2 ×1

gtk3 ×1

gtkmm ×1

include ×1

librsvg ×1

linux ×1

overlay ×1

pango ×1

pygobject ×1

python-3.x ×1

truetype ×1

widget ×1