用Cairo画IBM logo并输出为pdf,ps,svg格式文件
Table of Contents
ibm_cairo_logo.c
Makefile
已经在这里给出了源代码:https://blog.csdn.net/Rong_Toa/article/details/88079069
ibm_cairo_logo.c
#include <gtk/gtk.h>
#include <cairo.h>
#include <cairo-pdf.h>
#include <cairo-ps.h>
#include <cairo-svg.h>
#include <math.h>
#include <gdk/gdkkeysyms.h>
#include <string.h>#define WIDTH 800
#define HEIGHT 600
#define STRIDE WIDTH*4
#define MAX_COORDS 1024/* This path desribes what will be drawn later The bulk of it is doing the IBM letters by connect the dotsat the very end, we will get fancy and add a (R) Registered logo.
*/
static void
travel_path (cairo_t *cr)
{gint pen_radius = 10;cairo_set_source_rgb (cr, 1,1,1);cairo_paint (cr);cairo_set_line_width (cr, pen_radius*2);/* Use IBM Blue Pen Color with no ALPHA */cairo_set_source_rgba (cr, .3, .42, .69, 1);/* This Draws the IBM 8 Lines "I" Logo */cairo_move_to (cr, 10, 10);cairo_line_to (cr, 160, 10); cairo_move_to (cr, 10, 40);cairo_line_to (cr, 160, 40);/* NOTE: Narrower Middle: 1/3 width */cairo_move_to (cr, 60, 70);cairo_line_to (cr, 110, 70);cairo_move_to (cr, 60, 100);cairo_line_to (cr, 110, 100);cairo_move_to (cr, 60, 130);cairo_line_to (cr, 110, 130);cairo_move_to (cr, 60, 160);cairo_line_to (cr, 110, 160);/* END Narrower Middle */cairo_move_to (cr, 10, 190);cairo_line_to (cr, 160, 190);cairo_move_to (cr, 10, 220);cairo_line_to (cr, 160, 220);/* END "I" DRAWING *//* This Draws the IBM 8 Lines "B" Logo */cairo_move_to (cr, 170, 10);cairo_line_to (cr, 340, 10); cairo_move_to (cr, 170, 40);cairo_line_to (cr, 360, 40); cairo_move_to (cr, 200, 70);cairo_line_to (cr, 250, 70);/*B's have holes in them! */cairo_move_to (cr, 300, 70); cairo_line_to (cr, 360, 70); cairo_move_to (cr, 210, 100);cairo_line_to (cr, 350, 100); cairo_move_to (cr, 210, 130);cairo_line_to (cr, 350, 130); cairo_move_to (cr, 200, 160);cairo_line_to (cr, 250, 160);/*B's have holes in them! */cairo_move_to (cr, 300, 160); cairo_line_to (cr, 360, 160); cairo_move_to (cr, 170, 190);cairo_line_to (cr, 360, 190); cairo_move_to (cr, 170, 220);cairo_line_to (cr, 340, 220); /* END "B" DRAWING *//* THE EVER POINTY "M" */cairo_move_to (cr, 370, 10);cairo_line_to (cr, 470, 10); cairo_move_to (cr, 560, 10);cairo_line_to (cr, 660, 10); cairo_move_to (cr, 370, 40);cairo_line_to (cr, 490, 40); cairo_move_to (cr, 540, 40);cairo_line_to (cr, 660, 40); cairo_move_to (cr, 400, 70);cairo_line_to (cr, 510, 70); cairo_move_to (cr, 520, 70);cairo_line_to (cr, 630, 70); cairo_move_to (cr, 400, 100);cairo_line_to (cr, 630, 100); cairo_move_to (cr, 400, 130);cairo_line_to (cr, 470, 130);cairo_move_to (cr, 480, 130);cairo_line_to (cr, 550, 130);cairo_move_to (cr, 560, 130);cairo_line_to (cr, 630, 130); cairo_move_to (cr, 400, 160);cairo_line_to (cr, 470, 160);cairo_move_to (cr, 490, 160);cairo_line_to (cr, 540, 160);cairo_move_to (cr, 560, 160);cairo_line_to (cr, 630, 160); cairo_move_to (cr, 370, 190);cairo_line_to (cr, 470, 190);cairo_move_to (cr, 500, 190);cairo_line_to (cr, 530, 190);cairo_move_to (cr, 560, 190);cairo_line_to (cr, 660, 190); cairo_move_to (cr, 370, 220);cairo_line_to (cr, 470, 220);cairo_move_to (cr, 510, 220);cairo_line_to (cr, 520, 220);cairo_move_to (cr, 560, 220);cairo_line_to (cr, 660, 220); /* END POINTY LETTERS *//* We stroke the path so we see everything we just specifiedby connecting the dots*/cairo_stroke(cr);/* Let us add a disclaimer and show some fancy cairo: *//* We are going to want a nice fine lined circle around the R you need to make sure you have stroked existing thingsthat you wanted drawn with the larger pen before continuing. */cairo_set_line_width (cr, pen_radius*.5);/* Now we will draw the fancy circle around the "R" *//* NOTE: The angles are in radians */cairo_move_to (cr, 710, 200);double angle1 = 0 * (M_PI/180.0); double angle2 = 360 * (M_PI/180.0);/* We draw a large black circle */cairo_set_source_rgba (cr, 0, 0, 0, 1);cairo_arc (cr, 710, 200, 20, angle1, angle2);cairo_stroke (cr);/* We draw a smaller white circle centered on it */cairo_set_source_rgba (cr, 1, 1, 1, 1);cairo_arc (cr, 710, 200, 20, angle1, angle2);/* We use the fill operator to fill in the circle! */cairo_fill (cr);/* We are going to draw the letter "R" with black pen*/cairo_move_to (cr, 695,212); /* Bottom left of text at point */cairo_set_source_rgba (cr, 0, 0, 0, 1);cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL,CAIRO_FONT_WEIGHT_BOLD);cairo_set_font_size (cr, 40);cairo_show_text (cr, "R");/* We stroke everything we have just done to actually draw it...*/ cairo_stroke (cr); }/* Apply our path to the surface specified */
static void
draw (cairo_surface_t *surface)
{cairo_t *cr;cr = cairo_create (surface);/* Try applying the scale and rotate factors here to examine their effects on the output!*//* cairo_rotate (cr, -M_PI / 4); *//* cairo_scale (cr, 2, 1.0); */travel_path (cr);cairo_destroy (cr);
}/* Function needed to draw to gtk window */
static void
draw_gtk (GtkWidget *widget,GdkEventExpose *eev,gpointer data)
{cairo_t *cr;cr = gdk_cairo_create (widget->window);travel_path (cr);cairo_destroy (cr);
}/* We will draw our path on multiple surfaces to demonstrate some of the various cairo backend
*/
int
main (gint argc,gchar **argv)
{cairo_surface_t *surface;/* PDF Backend */surface = cairo_pdf_surface_create ("IBM.pdf",WIDTH, HEIGHT);draw (surface);cairo_surface_destroy (surface);/* Postscript Backend */surface = cairo_ps_surface_create ("IBM.ps",WIDTH, HEIGHT);draw (surface);cairo_surface_destroy (surface);/* Image backend */surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,WIDTH, HEIGHT);draw (surface);cairo_surface_write_to_png (surface, "IBM.png");cairo_surface_destroy (surface);/* Scalable Vector Graphics Backend */surface = cairo_svg_surface_create ("IBM.svg",WIDTH, HEIGHT);draw (surface);cairo_surface_destroy (surface);/* GTK Window using Cairo */gtk_init (NULL, NULL); /* Fire up GTK! */GtkWidget *mainwin; /* Make a new windows */GtkWidget *canvas = NULL; /* Make a new canvas */mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);canvas = gtk_drawing_area_new ();gtk_widget_set_size_request (canvas, WIDTH, HEIGHT); gtk_container_add (GTK_CONTAINER (mainwin), canvas); /* Place the canvas in the window */g_signal_connect (mainwin, "destroy", G_CALLBACK (gtk_main_quit), NULL); /* Quit graphically *//* Instead of drawing like usual, we connect the expose event to do the drawing! */g_signal_connect (G_OBJECT (canvas), "expose-event",G_CALLBACK (draw_gtk), NULL);gtk_widget_show_all (mainwin); /* Show the window on the screen */gtk_main ();return 0;
}
Makefile
all: gcc ibm_cairo_logo.c `pkg-config --libs --cflags gtk+-2.0`
clean:rm -f a.out
用Cairo画IBM logo并输出为pdf,ps,svg格式文件相关推荐
- Solidworks输出1:1图纸DWG格式文件参数设置
Solidworks输出1:1图纸DWG格式文件参数设置 在工程图中,工程图视图采用图纸比例模式下,输出1:1 点击菜单上的文件-另存为 选择dwg或者dxf格式 3.输出时比例激活设置选项 在左侧 ...
- 快速制作svg格式logo并将其转化为png矢量图
[实用技巧]快速制作svg格式logo并将其转化为png矢量图 ps 写于2019年 准备材料 操作流程 在logojoy网站内根据提示创建出自己想要的logo. 在最后的生成的logo界面右键检查你 ...
- 为什么我的cairo画出的直线不同角度宽度不同???
文章目录 一.为什么我的cairo画出的直线不同角度宽度不同??? 二.再看Cairo官方API介绍 cairo_set_line_width () 三.修改code实现不修改CTM情况下的坐标变换 ...
- R语言图层—利用ggplot画蝙蝠侠logo及分层
R语言图层-利用ggplot画蝙蝠侠logo及分层 batman logo是由六个函数构成的. 利用ggplot2将多个线画到同一幅图案里面. 以下是r代码: require(ggplot2)f1 & ...
- java网格画线_java 网格输出的类--练习 stream
在做测试的时候,经常需要把一些信息输出到控制台,但是格式上比较乱,想弄成一个类似 SQL 客户端的那个输出格式,在参考了一些资料后自己写了一个简单的控制台网格输出的类,分享代码供大家参考. 使用方法: ...
- python-pyecharts绘图-坐标轴标签格式化formatter+刻度调整+批量输出为pdf
问题描述 昨天一直在搞pyecharts绘图和输出,网上搜了不少,坑太多了...最终我绘图的结果如下: 遇到的难点:(下面会逐一给出解法!完整代码涉及隐私,恕不提供!有问题请留言讨论) x轴和y轴的名 ...
- 如何把标签输出为PDF文件
很多用户在使用条码软件制作标签文件时,大多数时候都会直接连接打印机将标签打印出来,但是有时候会需要将制作完成的标签输出为PDF文件.其实条码软件支持多种输出方式,比如位图.矢量图.PDF文件等.下面我 ...
- php输出网络连接,如何打开php文件和输出内容
php是什么文件?php文件如何打开?如何输出php内容?我们经常会遇到一些以php格式.php结尾的文件,对于不认识这种文件是什么,又不知道怎么打开php文件,下面网络自学网就来详细介绍什么php文 ...
- python输出日志文件_python将print输出的信息保留到日志文件中
具体代码如下所示: import sys import os import sys import io import datetime def create_detail_day(): ''' :re ...
最新文章
- 品质检测破局:工业视觉检测云平台为智能制造“点睛”
- 刚接触机器学习这一个月我都做了什么?
- vue 加载页面时触发时间_解析Vue项目的四个方面优化
- Httprunner测试
- leetcode 2. 两数相加
- SpringMVC获取Request,Response, Session对象
- 矩阵A对任意的可逆矩阵p都有Ap=pA,证明A为数量矩阵
- 持续集成之Jenkins安装部署
- php检查某个网站,用php开发一个检测某网站是否在正常运行的小模块
- mysql8从入门到精通电子书_MySQL 8从入门到精通(视频教学版)
- mp3分割方法,如何将mp3分割
- 想用好低代码这把“双刃剑”,先搞清楚这三个问题|低代码系列(四)
- SQL中常用的字符串LEFT函数和RIGHT函数详解
- 如何准备机器学习数据集_机器学习演练第一部分:准备数据
- 成长中必知的20个故事[转]
- 值得学习的开源web项目
- 不靠谱的预测:今年双十一的销量是 6213 亿元
- 除留余数法构造哈希函数并用链地址法处理哈希冲突【C++实现】
- Intel AMT RDK SDK SCS的概念介绍。
- 【操作系统实验】实验二 进程管理