Pixels 类提供了对原始图像像素的高效访问。图像像素(类型为Quantum)可以通过Image Pixel Cache(图像像素缓存)直接访问。图像像素缓存是实际图像像素的一个矩形窗口(视图),这些像素可能存储在内存中、从磁盘文件内存映射或完全位于磁盘上。通过get()获取现有的图像像素。使用set()创建新的像素区域。
根据操作系统的功能以及窗口与图像的关系,像素缓存可能是所选窗口中像素的副本,也可能是实际的图像像素。无论哪种情况,调用sync()都能确保基础图像使用修改后的像素缓存内容进行更新。decode()方法支持根据QuantumTypes将外部像素数据格式复制到像素缓存中。encode()方法支持根据QuantumTypes指定的格式将缓存中的像素复制到外部像素表示形式中。
使用 Pixels 类设置视图不会导致对基础图像的引用数减少到 1。因此,为了确保仅修改图像的当前版本,应调用 Image 的modifyImage()方法,将基础图像的引用计数减少到 1。如果不这样做,则由于在复制或构造 Image 时使用引用计数,可能会修改图像的先前版本。
set 和 get 方法返回的Quantum* 以及indexes 方法返回的void* 指向由Pixels 类管理的像素数据。Pixels 类负责释放与像素视图关联的资源。这意味着永远不应该将该指针传递给 delete() 或 free()。
像素视图是一个小的图像,其中可以访问、寻址和更新像素,如下例所示,该例生成的图像类似于右侧的图像(减去线条和文本)
Pixels 支持以下方法
像素缓存方法
方法 |
返回值 |
签名 |
描述 |
const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ |
将图像中的读写像素传输到由指定矩形区域定义的像素缓存中。修改后的像素随后可以通过sync传输回图像。返回值仅用于像素访问。永远不应该释放它。 |
||
const Quantum* |
const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ |
将图像中的只读像素传输到由指定矩形区域定义的像素缓存中。 |
|
const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ |
分配一个像素缓存区域,以存储由区域矩形定义的图像像素。此区域随后通过sync从像素缓存传输到图像。返回值仅用于像素访问。永远不应该释放它。 |
||
void |
void |
将图像缓存像素传输到图像。 |
|
void* |
void |
返回与上次get、getConst 或 set 调用定义的像素区域相对应的伪彩色像素索引。仅对 PseudoColor 和 CMYKA 图像有效。像素索引(类型为void的数组,它是Quantum的 typedef,Quantum 本身又是unsigned char或unsigned short的 typedef,具体取决于QuantumDepth定义的值)为图像中每个像素提供colormap索引(参见colorMap)。对于 CMYKA 图像,索引表示黑色通道。返回值仅用于像素访问。永远不应该释放它。 |
|
int |
void |
视图的左坐标 |
|
int |
void |
视图的顶部坐标 |
|
size_t |
void |
视图的宽度 |
|
size_t |
void |
视图的高度 |