标签归档:绘制

JUCE组件之Drawable详解

Component组件类只是一个可视的空白矩形区域(前提是paint()中绘制了背景,否则,组件默认是透明的),如果要显示图形图像等等,需在paint()函数中利用Graphics或Path等类的对象进行相关的描述、填充或绘制。而Drawable可绘制类则天然具有绘制的能力,其继承自Component类,相当于一个天然可绘制的组件,或者说,可进行自我绘制的组件。Drawable本身是一个抽象类,有多个派生的功能类,其继承层次如下图所示:

继续阅读JUCE组件之Drawable详解

JUCE图像处理之Image及相关类2-2

获取图像后的显示(绘制该图像):

// 定义并初始化Image对象,图像来源为磁盘中的文件
Image img1 = ImageFileFormat::loadFrom (File::getCurrentWorkingDirectory()
                                        .getChildFile ("img\\demo.jpg"));

g.setImageResamplingQuality (Graphics::highResamplingQuality); // 设置绘制质量

/** drawImageWithin()有7个参数,依次为:要绘制的图像对象,起点x,起点y,宽,高,图像的布局样式(枚举常量)。最后一个参数为是否填充图像的Alpha通道,有默认值,未显式给出 */
g.drawImageWithin (img1, 5, 5, img.getWidth()/2 + 10, getHeight(), 
       RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize);

// 定义并初始化第2个Image对象,图像来源为内存块数据
Image img2 = ImageCache::getFromMemory (DemoImg::imgData_jpg, 
                                        DemoImg::imgData_Size); 

// 内容组件类的paint()方法将图像绘制到界面中
g.drawImageWithin (img2, getWidth() / 2, 0, getWidth() / 2, getHeight(),
       RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize);

继续阅读JUCE图像处理之Image及相关类2-2

JUCE图像处理之Image及相关类2-1

本小节主要讨论以下3个类:

  • Image 图像
  • ImageCache 图像缓存
  • ImageFileFormat 读写图像数据(其下有3个派生类)

计算机绘制(显示)的原理是直接操纵屏幕上的像素,每个像素可由1字节(Alpha)、3字节(RGB)、4字节(ARGB)数据构成,一组按既定方式排列组合的像素数据可构成一副大小固定的图像。用面向对象的方式理解,Image类就可以代表这副图像的基本描述与模型蓝本。亦即:一个Image对象的实质是持有一组像素数据的集合,该集合可代表一副图像。

继续阅读JUCE图像处理之Image及相关类2-1

AffineTransform(仿射变换)详解

前面的代码中已多次出现AffineTransform仿射变换,该类的作用是:配合其他类(比如Path、Graphics)完成图形、图像和文字的旋转、翻转、缩放、平移、剪切等二维变换处理。比如轨迹对象在渲染前设置缩放效果:

myPath.applyTransform(AffineTransform::scale (0.5f, 0.5f, 缩放中心x, 中心y));

继续阅读AffineTransform(仿射变换)详解

使用OpenGL加速渲染

完成图形、图像和字型的绘制时,JUCE默认使用其原生的、基于软件算法的LowLevelGraphicsSoftwareRenderer。该类继承自LowLevelGraphicsContext抽象基类。

不少JUCE用户对Windows下字型渲染的效果颇有微词,排除字体本身和Windows在字型渲染方面独有的hint等因素之外,如果确实想实现Windows下那种纤细、锐利、带锯齿的字型渲染效果,一个关键步骤是:派生LowLevelGraphicsContext的子类,调用平台相关的win 32函数,而后做一些调整和优化,即可实现。

继续阅读使用OpenGL加速渲染

PathStrokeType(轨迹描边)详解

Path对象所描述的形状,不仅可以由Graphics对象直接填充,还可以只进行描边式绘制,即素描式绘制。比如:轨迹对象描绘的曲线等线型只是一个概念,并无宽度,此时就需要给该曲线一个宽度值,画刷描边后才可看到预想的结果。要实现此功能,需用到PathStrokeType轨迹描边类。前面的代码中已有涉及,本小节再补充一些技巧。

继续阅读PathStrokeType(轨迹描边)详解

Path与DrawablePath详解

Path(轨迹)类的对象是一组直线或曲线的序列,用于描述一个封闭或开放的形状。轨迹对象可包含多个子轨迹,这些子轨迹可以是开放的,也可以是封闭的。Path类有以下特性:

  • Path类的对象只是描述出一个形状,该形状并不可见,必须经过Graphics填充后才可见
  • Path类描述形状的函数,均从当前位置开始(即描绘某个形状之后的结束位置),到达参数坐标处

继续阅读Path与DrawablePath详解

JUCE类库Graphics详解 2-1

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

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

继续阅读JUCE类库Graphics详解 2-1