网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月03日漏签0天
c语言吧 关注:801,841贴子:4,375,988
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 3 下一页 尾页
  • 52回复贴,共3页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

Cairo & C语言 & GTK+3.0 & Linux

  • 只看楼主
  • 收藏

  • 回复
  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本人的 Cairo & C语言 & GTK+3.0 & Linux 记录贴,仅限楼中楼回帖,谢谢!
本贴侧重 Cairo 2D图形库!包含两类代码:
一类只生成图片的C语言代码;另一类包含GTK+3.0的图形界面C语言代码。
本贴所有源代码遵循并采用GPL第一版许可证!
其实本人C语言才刚入门,很多时候还是需要翻C语言书抄代码,纯兴趣而学C语言;
本贴目的:一记录,二交友。
******************************************

/* 首例源代码来自cairographics*org官网的C语言实例源码。*/
#include <cairo.h>
int main (int argc, char *argv[])
{
cairo_surface_t *surface =
cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 80);
cairo_t *cr = cairo_create (surface);
cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 32.0);
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
cairo_move_to (cr, 10.0, 50.0);
cairo_show_text (cr, "Hello, world");
cairo_destroy (cr);
cairo_surface_write_to_png (surface, "hello.png");
cairo_surface_destroy (surface);
return 0;
}


  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本人的一些相关帖子!
下面的帖子是关于Linux的安装,以BIOS+MBR为基准做的教程;使用UEFI+GPT的,请自行量力而行。
本贴教程仅供懂装操作系统基础的人参考;新手请慎重使用,最好请高手或专业人员帮你做。
免责声明,因使用"Linux桌面版与Win双系统完美方案"教程造成的硬盘数据丢失,一概无本人无关,本人不承担你的任何损失!
http://tieba.baidu.com/p/3859727480

下贴是关于Linux桌面发行版下C语言Cairo,GTK+3.0等下安装。
在Ubuntu下安装GTK+-3.0安装命令 sudo apt-get install gtk+-3.0
http://tieba.baidu.com/p/3865148159


2026-02-03 17:47:03
广告
不感兴趣
开通SVIP免广告
  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#本贴使用的两个脚本程序,看楼上的图片
#放到Linux /bin目录
#文件权限 chmod 755 zzcairo.sh
#*******************************
#第一个脚本:zzcairo.sh
# for bash:
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
#
# for csh:
# setenv PKG_CONFIG_PATH /usr/local/lib/pkgconfig
#
if [ ! -n "$1" ]; then
echo
echo "cairo 编译脚本操作示范:"
echo
echo " " $0 "mypro.c"
echo " " $0 "mypro.c myout.o"
echo
else
if [ ! -n "$2" ]; then
gcc $1 `pkg-config --cflags --libs cairo`
else
gcc $1 -o $2 `pkg-config --cflags --libs cairo`
fi
fi
#******************************
#第二个脚本:zzgtkcairo.sh
# for bash:
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
#
# for csh:
# setenv PKG_CONFIG_PATH /usr/local/lib/pkgconfig
#
if [ ! -n "$1" ]; then
echo
echo "cairo gtk编译脚本操作示范:"
echo
echo " " $0 "mypro.c"
echo " " $0 "mypro.c myout.o"
echo
else
if [ ! -n "$2" ]; then
gcc $1 `pkg-config --cflags --libs cairo gtk+-3.0`
else
gcc $1 -o $2 `pkg-config --cflags --libs cairo gtk+-3.0`
fi
fi


  • 我变成鱼了
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
话说现在GTK系直接上C的也少了,一般都是用C++或者py的binding。。


  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* cairo002.c 生成pdf格式文件 */

/* cairo PDF IMAGE */
#include <cairo.h>
#include <cairo-pdf.h>
#include <stdlib.h>
#include <string.h>
static cairo_surface_t *surface = NULL;
struct df_canvas
{
char filename[28];
int type;
double width;
double height;
};
int df_draw_brush (struct df_canvas const *pcanvas)
{
cairo_t *cr;
cr = cairo_create (surface);
cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 52.0);
cairo_set_source_rgb (cr, 0.15, 0.20, 0.17);
cairo_move_to (cr, 10.0, 70.0);
cairo_show_text (cr, "世界,你好!");
cairo_set_font_size (cr, 52.0);
cairo_set_line_width (cr, 20.0);
cairo_set_source_rgb (cr, 0.27, 0.73, 0.49);
cairo_move_to (cr, 12, 68.0);
cairo_show_text (cr, "世界,你好!");
switch (pcanvas -> type)
{
case CAIRO_SURFACE_TYPE_IMAGE:
cairo_surface_write_to_png (surface, pcanvas -> filename);
break;
case CAIRO_SURFACE_TYPE_PDF:
cairo_show_page(cr);
break;
}
cairo_destroy (cr);
}
int df_init_canvas (struct df_canvas const *pcanvas)
{
switch (pcanvas -> type)
{
case CAIRO_SURFACE_TYPE_IMAGE:
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (int) pcanvas -> width, (int) pcanvas -> height);
break;
case CAIRO_SURFACE_TYPE_PDF:
surface = cairo_pdf_surface_create (pcanvas -> filename, pcanvas -> width, pcanvas -> height);
break;
}
}
int main (int argc, char *argv[])
{
struct df_canvas *canvas;
canvas = (struct df_canvas*) malloc (sizeof (struct df_canvas));
strncpy(canvas -> filename, "hello.pdf",28);
canvas -> type = CAIRO_SURFACE_TYPE_PDF;
canvas -> width = 320.0;
canvas -> height = 240.0;
/* printf("%d %f %f %s \n",canvas -> type, canvas -> width, canvas -> height, canvas -> filename); */
df_init_canvas (canvas);
df_draw_brush (canvas);
free (canvas);
if (surface != NULL) cairo_surface_destroy (surface);
return 0;
}


  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* cairo003.c 生成svg格式文件 */

/* cairo SVG PDF IMAGE */
#include <cairo.h>
#include <cairo-pdf.h>
#include <cairo-svg.h>
#include <stdlib.h>
#include <string.h>
static cairo_surface_t *surface = NULL;
struct df_canvas
{
char filename[28];
int type;
double width;
double height;
};
int df_draw_brush (struct df_canvas const *pcanvas)
{
cairo_t *cr;
cr = cairo_create (surface);
cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 52.0);
cairo_set_source_rgb (cr, 0.15, 0.20, 0.17);
cairo_move_to (cr, 10.0, 70.0);
cairo_show_text (cr, "世界,你好!");
cairo_set_font_size (cr, 52.0);
cairo_set_line_width (cr, 20.0);
cairo_set_source_rgb (cr, 0.27, 0.73, 0.49);
cairo_move_to (cr, 12, 68.0);
cairo_show_text (cr, "世界,你好!");
switch (pcanvas -> type)
{
case CAIRO_SURFACE_TYPE_IMAGE:
cairo_surface_write_to_png (surface, pcanvas -> filename);
break;
case CAIRO_SURFACE_TYPE_PDF:
cairo_show_page(cr);
break;
}
cairo_destroy (cr);
}
int df_init_canvas (struct df_canvas const *pcanvas)
{
switch (pcanvas -> type)
{
case CAIRO_SURFACE_TYPE_IMAGE:
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (int) pcanvas -> width, (int) pcanvas -> height);
break;
case CAIRO_SURFACE_TYPE_PDF:
surface = cairo_pdf_surface_create (pcanvas -> filename, pcanvas -> width, pcanvas -> height);
break;
case CAIRO_SURFACE_TYPE_SVG:
surface = cairo_svg_surface_create (pcanvas -> filename, pcanvas -> width, pcanvas -> height);
break;
}
}
int main (int argc, char *argv[])
{
struct df_canvas *canvas;
canvas = (struct df_canvas*) malloc (sizeof (struct df_canvas));
strncpy(canvas -> filename, "hello.svg",28);
canvas -> type = CAIRO_SURFACE_TYPE_SVG;
canvas -> width = 320.0;
canvas -> height = 240.0;
/* printf("%d %f %f %s \n",canvas -> type, canvas -> width, canvas -> height, canvas -> filename); */
df_init_canvas (canvas);
df_draw_brush (canvas);
free (canvas);
if (surface != NULL) cairo_surface_destroy (surface);
return 0;
}


  • naoatnehc
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/* cairo004.c 弧arc 反弧arc_negative*/
#include <cairo.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
static cairo_surface_t *surface = NULL;
struct df_canvas
{
char filename[28];
int type;
double width;
double height;
};
int df_draw_brush (struct df_canvas const *pcanvas)
{
cairo_t *cr;
double xc, yc, radius, angle1, angle2;
cr = cairo_create (surface);
xc = 320;
yc = 198;
radius = 100;
angle1 = 0.0 * (M_PI / 180.0); /* 角度转弧度 */
angle2 = 225.0 * (M_PI / 180.0);
cairo_set_line_width (cr, 20.0); /* 线宽度: 20像素 */
/* 弧: 圆心坐标为(160,198),半径为100, 起始角度0度,终止角度225度 */
cairo_arc (cr, xc - 160, yc, radius, angle1, angle2);
cairo_stroke (cr);
/* 反弧: 圆心坐标为(480,198),半径为100, 起始角度0度,终止角度225度 */
cairo_arc_negative (cr, xc + 160, yc, radius, angle1, angle2);
cairo_stroke (cr);
cairo_surface_write_to_png (surface, pcanvas -> filename);
cairo_destroy (cr);
}
int df_init_canvas (struct df_canvas const *pcanvas)
{
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (int) pcanvas -> width, (int) pcanvas -> height);
}
int main (int argc, char *argv[])
{
struct df_canvas *canvas;
canvas = (struct df_canvas*) malloc (sizeof (struct df_canvas));
strncpy(canvas -> filename, "hello.png",28);
canvas -> type = CAIRO_SURFACE_TYPE_IMAGE;
canvas -> width = 640.0;
canvas -> height = 396.0;
df_init_canvas (canvas);
df_draw_brush (canvas);
free (canvas);
if (surface != NULL) cairo_surface_destroy (surface);
return 0;
}


2026-02-03 17:41:03
广告
不感兴趣
开通SVIP免广告
  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/* cairo005.c 圆弧arc 虚线dash */
#include <cairo.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
static cairo_surface_t *surface = NULL;
struct df_canvas
{
char filename[28];
int type;
double width;
double height;
};
int df_draw_brush (struct df_canvas const *pcanvas)
{
cairo_t *cr;
double xc, yc, radius, angle1, angle2;
cr = cairo_create (surface);
xc = 320;
yc = 198;
radius = 100;
angle1 = 0.0 * (M_PI / 180.0); /* 角度转弧度 */
angle2 = 2 * M_PI; /* angle2角度为360度 */
cairo_set_line_width (cr, 10.0); /* 线宽度: 10像素 */
/* 圆弧: 圆心坐标为(160,198),半径为100, 起始角度0度,终止角度360度 */
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); /* 红色 */
cairo_arc (cr, xc - 160, yc, radius, angle1, angle2);
cairo_stroke (cr);
/* 圆弧点:圆心坐标为(320,198),半径为5, 起始角度0度,终止角度360度 */
cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); /* 绿色 */
cairo_arc (cr, xc, yc, 5, angle1, angle2);
cairo_stroke (cr);
/* 虚线圆弧: 圆心坐标为(480,198),半径为100, 起始角度0度,终止角度360度 */
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); /* 蓝色 */
double dashes[] = {30,10,10,10}; /* 虚线dashes 连 断 连 断 */
int ndash = sizeof (dashes) / sizeof (dashes[0]);
cairo_set_dash (cr, dashes, ndash, -5 );
cairo_arc (cr, xc + 160, yc, radius, angle1, angle2);
cairo_stroke (cr);
cairo_surface_write_to_png (surface, pcanvas -> filename);
cairo_destroy (cr);
}
int df_init_canvas (struct df_canvas const *pcanvas)
{
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (int) pcanvas -> width, (int) pcanvas -> height);
}
int main (int argc, char *argv[])
{
struct df_canvas *canvas;
canvas = (struct df_canvas*) malloc (sizeof (struct df_canvas));
strncpy(canvas -> filename, "hello.png",28);
canvas -> type = CAIRO_SURFACE_TYPE_IMAGE;
canvas -> width = 640.0;
canvas -> height = 396.0;
df_init_canvas (canvas);
df_draw_brush (canvas);
free (canvas);
if (surface != NULL) cairo_surface_destroy (surface);
return 0;
}


  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/* cairo006.c 弧形填充fill */
#include <cairo.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
static cairo_surface_t *surface = NULL;
struct df_canvas
{
char filename[28];
int type;
double width;
double height;
};
int df_draw_brush (struct df_canvas const *pcanvas)
{
cairo_t *cr;
double xc, yc, radius, angle1, angle2;
cr = cairo_create (surface);
xc = 320;
yc = 198;
radius = 100;
angle1 = 0.0;
angle2 = 145.0 * (M_PI / 180);
cairo_set_line_width (cr, 10);
cairo_set_source_rgb (cr, 0.0, 0.9, 0.0); /* 绿色弧线 */
cairo_arc (cr, xc - 160, yc, radius, angle1, angle2);
cairo_stroke_preserve (cr);
cairo_set_source_rgb (cr, 0.9, 0.0, 0.0); /* 红色填充 */
cairo_fill (cr);
double dashes[] = {20,10};
int ndash = sizeof (dashes) /sizeof (dashes[0]);
cairo_set_dash (cr, dashes, ndash, 0);
cairo_set_source_rgb (cr, 0.9, 0.0, 0.0); /* 红色虚线圆弧 */
cairo_arc (cr, xc + 160, yc, radius, angle1, 2 * M_PI);
cairo_stroke_preserve (cr);
cairo_set_source_rgb (cr, 0.9, 0.9, 0.0); /* 黄色填充 */
cairo_fill (cr);
cairo_stroke (cr);
cairo_surface_write_to_png (surface, pcanvas -> filename);
cairo_destroy (cr);
}
int df_init_canvas (struct df_canvas const *pcanvas)
{
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (int) pcanvas -> width, (int) pcanvas -> height);
}
int main (int argc, char *argv[])
{
struct df_canvas *canvas;
canvas = (struct df_canvas*) malloc (sizeof (struct df_canvas));
strncpy (canvas -> filename, "hello.png", 28);
canvas -> type = CAIRO_SURFACE_TYPE_IMAGE;
canvas -> width = 640.0;
canvas -> height = 396.0;
df_init_canvas (canvas);
df_draw_brush (canvas);
free (canvas);
if (surface != NULL) cairo_surface_destroy (surface);
return 0;
}


  • naoatnehc
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不错,最近我想学这个


  • 葫小伟v
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
偶是来打酱油的~


  • AutoRunAs
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
向日葵盘列图;我以前用其他编程语言写过,这次用C语言的Cairo库重写一次!

/* cairo007.c df_draw_sunflower 画向日葵 */
/* 在Linux桌面系统下调用数学库中的三角函数sin(), cos() 时,
* gcc需要添加 -lm 调用参数,否则会出错。
* 完整命令如下:
* gcc myfile.c -Wall -lm `pkg-config --cflags --libs cairo`
*/
#include <cairo.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
static cairo_surface_t *surface = NULL;
struct df_canvas
{
char filename[28];
int type;
double width;
double height;
};
/* df_draw_sunflower 画向日葵
* x,y 向日葵圆心坐标
* radius 向日葵半径
* angle 向日葵两点间的夹角 (黄金分割角 360 * 0.618)
* space 向日葵圈与圈的间距
*/
void df_draw_sunflower (double x, double y, double radius, double angle, double space)
{
cairo_t *cr;
int j;
double x1, y1, angle1, radius1;
cr = cairo_create (surface);
cairo_set_line_width (cr, 2.0); /* 线宽2像素 */
cairo_set_source_rgb (cr, 0.9, 0.9, 0.0); /* 黄色 */
if (! space) space = 1;
angle1 = 0; /* 起始角度0,每次循环递增+angle */
radius1 = 0; /* 起始半径0,循环递增+space直至radius */
do
{
/* 已知起始坐标,半径,角度,求点未知坐标 */
y1 = y + radius1 * sin(angle1 * (M_PI / 180));
x1 = x + radius1 * cos(angle1 * (M_PI / 180));
cairo_arc (cr, x1, y1, 1, 0, 2 * M_PI); /* 画黄色圆点 */
cairo_stroke (cr);
angle1 += angle; /* 递增算出下一个点的角度 */
if (angle1 > j * 360) /* 画完一圈,半径递增+space */
{
radius1 += space;
++j;
}
}while (radius >= radius1);
cairo_destroy (cr);
}
void clear_surface (void)
{
cairo_t *cr;
cr = cairo_create (surface);
cairo_set_source_rgb (cr, 0, 0, 0); /* 黑色 */
cairo_paint (cr);
cairo_destroy (cr);
}
void df_draw_brush (struct df_canvas const *pcanvas)
{
double xc, yc, radius, angle, space;
xc = 300;
yc = 300;
radius = 280;
angle = 360.0 * 0.618; /* 360度角的黄金分割 */
space = 1.0;
clear_surface();/* 设置黑色背景色 */
df_draw_sunflower (xc, yc, radius, angle, space); /* 画向日葵 */
cairo_surface_write_to_png (surface, pcanvas -> filename); /*保存png图片 */
}
void df_init_canvas (struct df_canvas const *pcanvas)
{
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (int) pcanvas -> width, (int) pcanvas -> height);
}
int main (int argc, char *argv[])
{
struct df_canvas *canvas;
canvas = (struct df_canvas*) malloc (sizeof (struct df_canvas));
strncpy(canvas -> filename, "hello.png",28);
canvas -> type = CAIRO_SURFACE_TYPE_IMAGE;
canvas -> width = 600.0;
canvas -> height = 600.0;
df_init_canvas (canvas); /* 画布surface初始化 */
df_draw_brush (canvas); /* 绘制图形 */
free (canvas);
if (surface != NULL) cairo_surface_destroy (surface);
return 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 52回复贴,共3页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示