StupidBeauty
Read times:842Posted at:Tue Dec 10 07:16:03 2013
- no title specified

Jwt3.3.0文档翻译:类WPainter,Class WPainter

向量图形绘图类

绘图器(painter)类提供了一个用于绘图的向量图形接口。它需要与一个 WPaintDevice 配套使用,因为它就是向那个东西上绘制的。要想在一个设备上开始绘图操作的话,或者将那个设备直接传递给这个类的构造函数,或者调用 begin()

典型的用法就是,在一个特定的 WPaintedWidget#paintEvent() 函数实现里面实例化一个WPainter,以便在指定的绘图设备上绘图。但是,妳也可以使用一个绘图器来直接向特定的绘图设备上绘图,例如(以资源的方式)创建SVG、PDF或PNG 图片。

绘图器会维护狠多状态信息,例如当前的 画笔 笔刷 字体 阴影 变换矩阵 和裁剪设置(参考 setClipping() setClipPath() )。可使用 save() 来保存一个特定的状态,并在日后使用 restore() 来恢复。

绘图系统会区分设备坐标、逻辑坐标和本地坐标。设备坐标系统,其范围为,(0, 0)表示其左上角,直到(device.width().toPixels(), device.height().toPixels())表示其右下角。本地坐标系统,定义的是一个不依赖于设备实际尺寸的坐标系统,这样就便于对实际的设备尺寸进行抽象。最后,当前的本地坐标系统也有可能与逻辑坐标系统不同,因为妳可能(通过 translate() rotate() scale() )为它设置了变换矩阵。初始条件下,本地坐标系统与逻辑坐标系统一致,后者又与设备坐标系统一致。

设备坐标是以像素为单位来定义的。尽管大部分的底层设备都是向量图形格式的,但是,一旦与一个 WPaintedWidget 配套使用,浏览器就会将这些向量图形渲染到一个基于像素点的画布上(就跟用户界面中其它部分一样)。坐标系统是经过特殊定义的,在其中,整数值对应于一个想象中的光栅点阵,它们把单个的像素分隔开来,见下图。

一个6x5 像素点设备的设备坐标系统

由于这个原因,当妳想要绘制出宽度为一个像素点的直线时,为了避免抗锯齿效应,妳需要把两个端点的坐标值都设置成表示某个像素点正中央的值,这样才会绘制出一条明显的一个像素宽度的线,见上图的例子。

通过设置一个视图口 getViewPort() )和一个窗口( getWindow() ),可以定义一个视图口(viewPort)变换矩阵(transformation),它会将逻辑坐标映射为设备坐标。通过修改世界变换矩阵(world transformation)(使用 setWorldTransform() translate() rotate() scale() 操作),可以定义好当前的本地坐标是如何映射到逻辑坐标的。

绘图器支持使用任意的 路径 来进行裁剪

参考

WPaintedWidget.paintEvent(WPaintDevice paintDevice)

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands