documentaries是什么意思umentaries在线翻译读-天使之城插曲


2023年4月1日发(作者:但愿人长久苏轼)

Cairo教程

Cairo教程(2010-05-0116:31)

这是翻译的cairo官⽹上的⼀篇教程,第⼀次认真的翻译⽂章,很多术语都拿捏不准,很多词语也是斟酌再三,即使这样翻译的我还是不满意。但翻译完了激情

也没了,只能如此。另外:原⽂的代码这⼉没草枯鹰眼疾雪尽马蹄轻的意思 链接,⼤家可以到去查看。

欢迎转载,但请注明出处(,nketc@)Cairo教程

Cairo是⼀个强⼤的2D图形库。本⽂档会向你介绍cairo如何⼯作和cairo的诸多函数,你会使⽤它们创建想象中的图像体验.

以便能在⾃⼰的计算机上继续下⾯的步骤,你需要这些东西:

1.

.如何你想在阅读过程中想查看这篇教程中包含的代码⽚段,可以点击本教程中的相关图⽚,就会获得⼀个包含期望

的绘制代码的⼩c程序.

或者如果你愿意⾯对挑战,可以把例⼦翻译为⾃⼰喜欢的编程语⾔,这样就只需上⾯列出的cairo.

注意:这篇⽂档中提到的cairo_push_group()和cairo_pop_group().需要最⼩1.2.0版的cairo.

⽬录

Cairo绘制模型

为了解释cairo使⽤的操作,我们先深⼊cairo绘制模型。这涉及到仅⼏个概念,他们会⼀次⼜⼀次的应⽤于不同的函数。⾸先

我会介绍这些:,,,,和.之后我会介绍⼀些动词,他们提供了操作名词的⽅式和创建你所希望的图形的⽅法.

名词

Cairo的名词有些抽象。我提供了⼀些描述这些名词之间关系的图表,来使这些概念具体化。前三个名词对应的就是这⼀节图

中的三个层。第四个名词路径当谈到它时把其画在了中间层上表⽰。最后⼀个名词池塘生春草园柳变鸣禽意思 上下⽂在图上没有表⽰。

⽬标(Destination)

源(Source)

蒙板(Mask)

蒙板最重要的⼀点是:它控制着把源的哪些地⽅应⽤到⽬标上。我把它显⽰为图中中间有⼀个洞的黄⾊的那个层,那个洞运⾏

源通过。当你使⽤⼀个绘制动词的时候,就像使⽤源在⽬标上盖了⼀个章。凡是蒙板允许的地⽅源就被复制到⽬标。蒙板不运

⾏的地⽅对⽬标没有任何影响.

路径(Path)

路径在某种程度上是介于蒙板和上下⽂之间的⼀个东西。我把它显⽰为蒙板层上的绿⾊的线。它由路径相关的动词控制,可以

被绘制动词使⽤.

上下⽂(Context)

上下⽂记录着可以影响动词的⼀切事物。它记录着⼀个源,⼀个⽬标,⼀个蒙板。同时它还记录着像线宽和及其样式、字体及

其⼤⼩等⼀些辅助变量。最重要的是上下⽂会记录路径,路径最终会被绘制动词转换成蒙板.

在使⽤cairo绘制前需要创建上下⽂。上下⽂信息被保存在cairo的中⼼数据类型cairo_t.创建⼀个上下⽂时必须和⼀个特定的

Surface关联,⽐如,图像surface,如果你想创建⼀个png图⽚⽂件的话。Surface也有⼀个数据类型:cairo_surface_t.可

以像下⾯这样初始化cairo上下⽂:

cairo_surface_t*surface;cairo_t*cr;surface=cairo_image_surface_create(CAIRO_FORMAT_ARGB32,120,120);

动词

在⼀个程序中使⽤cairo的原因使要使⽤它进⾏图形绘制.在cairo内部使⽤的⼀个基本的绘制操作是:⾸先源和蒙板随意放在

⽬标上.然后这些层叠加在⼀起,最后凡是蒙板允许的地⽅源被绘制到⽬标上.在这个程度上,下⾯的五个绘制动词,或操作,

是相似的.其区别在于构造蒙板的⽅式.

描边(Stroke)

cairo_set_line_width(cr,0.1);cairo_set_source_rgb(cr,0,0,0);cairo_rectangle(cr,0.25,0.25,0.5,0

填充(Fill)

cairo_set_source_rgb(cr,0,0,0);cairo_rectangle(cr,0.25,0.25,0.5,0.5);cairo_fill(cr);

显⽰⽂本/字形

cairo_text_extents_tte;cairo_set_source_rgb(cr,0.0,0.0,0.0);cairo_select_font_face(cr,\"Georgia\",

喷刷(Paint)

cairo_set_source_rgb(cr,0.0,0.0,0.0);cairo_paint_with_alpha(cr,0.5);

蒙板(Mask)

cairo_pattern_t*linpat,*radpat;linpat=cairo_pattern_create_linear(0,0,1,1);cairo_pattern_add_color_stop_rgb(lin

使⽤cairo绘制

准备和选择⼀个源

cairo_set_source_rgb(cr,0,0,0);cairo_move_to(cr,0,0);cairo_line_to(cr,1,1);cairo_move_to(cr,

inti,j;cairo_pattern_t*radpat,*linpat;radpat=cairo_pattern_create_radial(0.25,0.25,0.1,0.5,0.5,0

创建路径

cairo总是有⼀个活动的路径.如果调⽤就会使⽤设定的线型设置来画这个路径.如果调⽤就会填充路径的内部区域.但是常

常不是这样,路径是空的,这两个函数调⽤都不会改变⽬标.为什么路径常常是空的?原因之⼀是,⼀开始就是空的;但是更重要

的是每次或之后路径就被清空,以便接下来创建新的路径.

如果想使⽤相同的路径去做多种事情要怎么办?⽐如要画⼀个⿊边的红⾊矩形,你可能需要使⽤红⾊的源去填充这个矩形路径,

然后给这个路径描⼀个⿊边.⼀个矩形路径⽐较容易的创建多次,但如果是⼀⼤堆路径就⽐较复杂了.

移动(Moving)

cairo_move_to(cr,0.25,0.25);

直线(StraightLines)

cairo_line_to(cr,0.5,0.375);cairo_rel_line_to(cr,0.25,-0.125);

弧形(Arcs)

cairo_arc(cr,0.5,0.5,0.25*sqrt(2),-0.25*M_PI,0.25*M_PI);

曲线(Curves)

cairo_rel_curve_to(cr,-0.25,-0.125,-0.25,0.125,-0.5,0);

闭合路径(Closethepath)

Cairo能够画⼀条到当前⼦路经开始处的直线来闭合⼀个路径.这条直线可以⽤于多边形的最后⼀条边,但是对于基于曲线的形

状不是⾮常有⽤.闭合路径和开放路径有着根本的不同:它是⼀个连续的没有开始和结束位置的路径.闭合路径没有线头(line

caps),因为没有地⽅来放它.

cairo_close_path(cr);

⽂本(Text)

认识⽂本(UnderstandingText)

参考点总是在基线(baseline)上.下间距线(descentline)在它下边,反映了字体中所有字符的⼤致边界.

然⽽,它是为了指⽰对齐的技术上的选择,⽽不是真实的边界。上⾯的上间距线(ascentline)也是这样.再上

⾯是heightline,它是上下两个基线(baseline)之间的推荐距离。所有这三个距离是从基线(baseline)

开始计算的,不管其⽅向都应该是正值.

⽅位是参考点到最⼩包围框(boundingbox)左上⾓的位移.x的位移通常是唐诗300首古诗全集免费下载 0或者⼩的正数,但对于象上⾯显⽰的字符j,x

可以是负数。y的位移总是负数.宽度和⾼度描述的是最⼩包围框(boundingbox)的⼤⼩.步进宽度(advance)指⽰了下

⼀个字符的参考点.要注意的是,如果⽅位位移是负值或者宽度步进(adance)⼩于建议的宽度,⼀些字符序列的最⼩包围框

(boundingbox)可能会重叠.

使⽤变换(WorkingwithTransforms)

要理解变换,要从细节到整体来学习(readthembottomtotop),要在实际中多使⽤它们.搞明⽩创建了那些变换,来祝福朋友的诗句 回

思考变换的过程及其逆过程.⽐如,如果我要把⼀个1.0x1.0的⼯作区映射为⼀个在120x120像素的surface上中间位置

处100x100⼤⼩的区域,可以有三中⽅法做到:

_translate(cr,10,10);cairo_scale(cr,100,100);

_scale(cr,100,100);cairo_translate(cr,0.1,0.1);

_matrix_tmat;cairo_matrix_init(&mat,100,0,0,100,10,10);cairo_transform(cr,&mat);

应该使⽤第⼀种⽅法,相关原因是它的可读性最好;当需要使⽤主要函数没有提供的控制是可以使⽤第三种⽅法.

下⼀步做什么(WheretoGoNext)

提⽰和技巧(TipsandTricks)

通过前⼏节的学习,你应该对cairo的操作有了⼀个⽐较牢固的理解.在这⼀节,我会提供⼏个我发现的⾮常有⽤或不是那么显

⽽易见的代码⽚段.我也还只是⼀个cairo新⼿,所有可能有更好的⽅法来完成这些事。如果你发现了更好的⽅法,或发现了⽐

较酷的做其他别的事情的⽅法,可以告诉我,公仪休相鲁而嗜鱼阅读答案 很可能我会把它们加⼊到这些提⽰中.

关于线宽(LineWidth)

当在⼀个统⼀的⽐例变换下⼯作,不能够正好使⽤像素表⽰线的宽度.然⽽,在cairo_device_to_user_distance()的帮助下很容

易进⾏转换(假设像素宽度是1):

doubleux=1,uy=1;cairo_device_to_user_distance(cr,&ux,&uy);if(ux

当在变形⽐例⽅式下⼯作时,你可能希望线在设备空间下仍然有统⼀的宽度.这样你就需要在描边(stroke)路径前,恢复为

⼀个统⼀的⽐例.在这幅图形中左边的弧形是在变形⽅式下被描绘的,⽽右边的是在统⼀⽐例下描绘的.

cairo_set_line_width(cr,0.1);cairo_save(cr);cairo_scale(cr,0.5,1);cairo_arc(cr,0.5,0.5,0.40,0,2*M_PI);cairo_

关于⽂本对齐(TextAlignment)

当你尝试让⽂本中的字符在不同的地⽅⼀个⼀个的居中对齐时,要确定使⽤哪种⽅式使其居中。例扔字组词 如下⾯的代码,它实际上是

使单个字符独⽴地居中,导致当不同⼤⼩的字符在⼀起时出现难看的效果.(和⼤多数例⼦不⼀样的是,我在这⼉使⽤的是26

x1的⼯作区.)

cairo_text_extents_tte;charalphabet[]=\"AbCdEfGhIjKlMnOpQrStUvWx

Yz\";charletter[2];for(i=0;i

相反,垂直居中必须⽴⾜于⼀般的字体⼤⼩(⽽不是单个字符⼤⼩),从⽽是基线(baseline)稳定。注意现在位置的控制依

赖于字体本⾝提供的量度(metrics),这样的量度从字体到字体不⼀定是相同的.

cairo_font_extents_tfe;cairo_text_extents_tte清明节的故事50字 ;charalphabet[]=\"AbCdEfGhIjKlMnOpQrStUvWx

Yz\";charletter[2];cairo_font_extents(cr,&fe);for(i=0;i

}

更多推荐

Cairo是什么意思ro在线翻译读音例句