void cairo_translate(cairo_t *cr, double tx, double ty);
通过将用户空间的起源(tx,ty),修改当前的变换矩阵。使图片平移
void cairo_rotate(cairo_t *cr, double angle);
由用户空间轴旋转角度的弧度修改当前的变换矩阵。角度旋转方向由x轴正向朝着积极的Y轴。使图片旋转
旋转函数接受弧度做参数(用M_PI去除)
注意:使用时,它是影响全局的,也就是旋转了之后,后面画的一切都是旋转的,所以旋转之前做一下cairo_save,完成需要的旋转之后做一下cairo_restore。
void cairo_scale(cairo_t *cr, double sx, double sy);
修改当前的变换矩阵,按比例缩放的X和Y轴的用户空间分别为sx和sy,sx指宽度缩放倍数,sy指高度缩放倍数
void cairo_paint_with_alpha(cairo_t *cr, double alpha);
一个绘图操作,使绘制淡出使用alpha,alpha在0(透明)和1(不透明)之间。
#############################################################################
cairo第二部分讲解
1.void cairo_set_font_size(cairo_t *cr, double size);
设置字体大小,默认的字体大小为10。
2.cairo_set_source_rgb(cr, 1, 1, 1); //设置源的颜色为白色
红,绿,蓝
3.void cairo_text_extents(cairo_t *cr, const char *utf8, cairo_text_extents_t *extents);
获取文本字符串的范围,extents描述一个用户空间的矩形包围“签署”的文本部分。
cairo_text_extents_t extents;
std::string tmpstr = "Hello world";
cairo_text_extents(cr, tmpstr.c_str(), &extents);
cairo_move_to(cr, 5, -extents.y_bearing); // 写入一行字,定位这行字在大矩形框内位置
cairo_show_text(cr, tmpstr.c_str());
cairo_translate(cr, 0, -extents.y_bearing + 15); // 用户空间矩形框往下平移,则第二行文字可以写入。
extents包含x_advance和y_advance,先通过cairo_translate(cr, 0, 15)平移用户空间的矩形框x=0,y=15。
然后cairo_show_text()。
4.cairo_rectangle(cr, 10, 10, 200, 200); // 画一个方块,位置从坐标(10,10)开始,宽200,高200。
5.cairo_fill(cr);//填充,使用的颜色当然是上面设置的颜色。
6.
#include
#include
#include
#include
int main()
{
FILE *file;
file=fopen("a.png","w");//打开一个文件,写入,文件名为a.png
cairo_t *cr; //声明一支画笔
cr=cairo_create();//创建画笔
cairo_set_target_png(cr,file,CAIRO_FORMAT_ARGB32,400,400);//设置画布,就是文件,a.png
cairo_set_rgb_color(cr,0,1,0);//设置画笔颜色,也就是红,绿,蓝,这里设置成绿色。
cairo_rectangle(cr,10,10,200,200);//画一个方块,位置从坐标(10,10)开始,宽200,高200
cairo_fill(cr);//填充,使用的颜色当然是上面设置的颜色。
cairo_move_to(cr,250,200);//将画笔移动到(250,200)
cairo_select_font (cr, "DongWen--Song",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);//为cairo设置一个字体,字体名DongWen--Song,非斜体,非粗体。
cairo_scale_font(cr,60);//缩放字体到60倍
cairo_show_text(cr,"hello world");//画出一个串
cairo_destroy(cr);//销毁画笔
fclose(file);//关闭文件
}