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格式文件相关推荐

  1. Solidworks输出1:1图纸DWG格式文件参数设置

    Solidworks输出1:1图纸DWG格式文件参数设置 在工程图中,工程图视图采用图纸比例模式下,输出1:1 点击菜单上的文件-另存为 选择dwg或者dxf格式 3.输出时比例激活设置选项 在左侧 ...

  2. 快速制作svg格式logo并将其转化为png矢量图

    [实用技巧]快速制作svg格式logo并将其转化为png矢量图 ps 写于2019年 准备材料 操作流程 在logojoy网站内根据提示创建出自己想要的logo. 在最后的生成的logo界面右键检查你 ...

  3. 为什么我的cairo画出的直线不同角度宽度不同???

    文章目录 一.为什么我的cairo画出的直线不同角度宽度不同??? 二.再看Cairo官方API介绍 cairo_set_line_width () 三.修改code实现不修改CTM情况下的坐标变换 ...

  4. R语言图层—利用ggplot画蝙蝠侠logo及分层

    R语言图层-利用ggplot画蝙蝠侠logo及分层 batman logo是由六个函数构成的. 利用ggplot2将多个线画到同一幅图案里面. 以下是r代码: require(ggplot2)f1 & ...

  5. java网格画线_java 网格输出的类--练习 stream

    在做测试的时候,经常需要把一些信息输出到控制台,但是格式上比较乱,想弄成一个类似 SQL 客户端的那个输出格式,在参考了一些资料后自己写了一个简单的控制台网格输出的类,分享代码供大家参考. 使用方法: ...

  6. python-pyecharts绘图-坐标轴标签格式化formatter+刻度调整+批量输出为pdf

    问题描述 昨天一直在搞pyecharts绘图和输出,网上搜了不少,坑太多了...最终我绘图的结果如下: 遇到的难点:(下面会逐一给出解法!完整代码涉及隐私,恕不提供!有问题请留言讨论) x轴和y轴的名 ...

  7. 如何把标签输出为PDF文件

    很多用户在使用条码软件制作标签文件时,大多数时候都会直接连接打印机将标签打印出来,但是有时候会需要将制作完成的标签输出为PDF文件.其实条码软件支持多种输出方式,比如位图.矢量图.PDF文件等.下面我 ...

  8. php输出网络连接,如何打开php文件和输出内容

    php是什么文件?php文件如何打开?如何输出php内容?我们经常会遇到一些以php格式.php结尾的文件,对于不认识这种文件是什么,又不知道怎么打开php文件,下面网络自学网就来详细介绍什么php文 ...

  9. python输出日志文件_python将print输出的信息保留到日志文件中

    具体代码如下所示: import sys import os import sys import io import datetime def create_detail_day(): ''' :re ...

最新文章

  1. 品质检测破局:工业视觉检测云平台为智能制造“点睛”
  2. 刚接触机器学习这一个月我都做了什么?
  3. vue 加载页面时触发时间_解析Vue项目的四个方面优化
  4. Httprunner测试
  5. leetcode 2. 两数相加
  6. SpringMVC获取Request,Response, Session对象
  7. 矩阵A对任意的可逆矩阵p都有Ap=pA,证明A为数量矩阵
  8. 持续集成之Jenkins安装部署
  9. php检查某个网站,用php开发一个检测某网站是否在正常运行的小模块
  10. mysql8从入门到精通电子书_MySQL 8从入门到精通(视频教学版)
  11. mp3分割方法,如何将mp3分割
  12. 想用好低代码这把“双刃剑”,先搞清楚这三个问题|低代码系列(四)
  13. SQL中常用的字符串LEFT函数和RIGHT函数详解
  14. 如何准备机器学习数据集_机器学习演练第一部分:准备数据
  15. 成长中必知的20个故事[转]
  16. 值得学习的开源web项目
  17. 不靠谱的预测:今年双十一的销量是 6213 亿元
  18. 除留余数法构造哈希函数并用链地址法处理哈希冲突【C++实现】
  19. Intel AMT RDK SDK SCS的概念介绍。
  20. 【操作系统实验】实验二 进程管理

热门文章

  1. 2019.08.29定时器以及轮播图
  2. 2019.8.21页面功能的实现
  3. go语言调度器源代码情景分析之五:汇编指令
  4. Python 第十一篇:开发堡垒机
  5. 《数据结构》双链循环线性表
  6. 使用JDBC完成数据的增删改查
  7. 10-2-文章分页展示
  8. 一致性hash算法虚拟节点_一致性 Hash 算法
  9. python的numpy是什么_python中numpy是什么
  10. android 禁用dlsym_一个绕过移动端系统限制的dlopen库: byOpen