870920 Menu

JUCE类库Graphics详解 2-1

Graphics是使用JUCE类库进行GUI编程,完成图形、图像、文字等界面元素绘制、渲染的核心类。其重要性无需多言。

可将Graphics理解为渲染和绘制(图像、文字、点线面、形状等一切可视化元素)的图形环境。在组件中绘制时,无需显式创建本类的对象,直接在组件类的paint()函数中用本类的引用型对象调用所需的成员函数即可完成具体的绘制工作。如显式创建本类对象,则意味着在构造参数中进行绘制。

本类有两个构造版本,构造参数分别是Image图像类的引用对象和LowLevelGraphicsContext底层图形环境类的指针。LowLevelGraphicsContext是一个抽象基类,有两个重要的派生类:

 LowLevelGraphicsPostScriptRenderer 将绘制操作转换为PostScript文档,可实现打印功能
 LowLevelGraphicsSoftwareRenderer 在内存中进行绘制和渲染,此类为JUCE默认的底层渲染环境。组件绘制时所用的Graphics,默认采用LowLevelGraphicsSoftwareRenderer渲染环境。

Graphics所完成绘制主要有两种类型:描绘(画笔)和填充(画刷),绘制之前需设置所需的属性,这类函数大多以set开头,可设置的属性及所需的参数类型为:颜色(Colour)、透明度(float)、字体(Font)、填充类型(FillType)、渐变颜色(ColourGradient)、图像的重采样质量(ResamplingQuality)、平铺图像(Image)、填充Path或Path描边(PathStokeType)等等。

而描绘性质的成员函数,则大多以draw开头,可绘制点、直线、虚线、箭头线、曲线、圆和椭圆、文本、图像、矩形边框、圆角边框等等,所有绘制的结果皆可进行AffineTransform仿射变换。fill开头的函数则用于填充各类区域、填充Path所描述的形状和Path描边(PathStrokeType)等等。

以下示例代码,均位于组件类的paint()函数中,也可位于形参为本类引用型对象的函数中,比如:

通常,这类函数由paint()所调用,调用时,paint()将自己的形参Graphics& g传递过去。

 设置颜色

 设置渐变色

 填充背景

 填充矩形区域和绘制圆角矩形的边线

 绘制一圈12个点

上例的数学公式:
x = cos(弧度) * 半径 + x轴(水平方向)上的圆心坐标x
y = sin(弧度) * 半径 + y轴(垂直方向)上的圆心坐标y

 绘制直线(重复调用并首尾相连,可绘制任意多边形)

注意:drawLine()函数有多个重载版本,起止点坐标均为float类型。为防止线宽为1.0f时所显示的效果模糊,可将坐标定位于屏幕上的两个像素点正中间,即:取xx.5f这个数值,比如:

 绘制文字

注:绘制文字更简单的办法是使用Graphics类的drawText…()函数(有多个绘制文本的函数)。该函数内部的实现其实和上述语句基本一致,即:利用GlyphArrangement字型排列类的对象绘制文本。示例:

 平铺图像

注:也可直接使用setTiledImageFill()函数来平铺图像,该函数的内部实现其实就是上述语句。

 轨迹描边