Magick::Pixels

Pixels 類別提供對原始影像像素的有效存取。 影像像素(類型為 Quantum) 可以透過 影像像素快取 直接存取。 影像像素快取是實際影像像素(可能位於記憶體中、從磁碟檔案記憶體映射或完全位於磁碟上)的矩形視窗(檢視)。 透過 get() 取得現有的影像像素。 使用 set() 建立新的像素區域。

根據作業系統的功能以及視窗與影像的關係,像素快取可能是所選取視窗中像素的副本,也可能是實際的影像像素。 無論如何,呼叫 sync() 可確保使用已修改像素快取的內容更新基礎影像。 decode() 方法支援根據 QuantumTypes 將外部像素資料格式複製到像素快取中。 encode() 方法支援根據 QuantumTypes 指定的格式將快取中的像素複製到外部像素表示法。

使用 Pixels 類別設定檢視不會導致對基礎影像的參考次數減少為一。 因此,為了確保只修改最新一代的影像,應呼叫影像的 modifyImage() 方法,將基礎影像的參考計數減少為一。 如果未完成此操作,則由於在複製或建構影像時使用參考計數,可能會修改先前版本的影像。

setget 方法傳回的 Quantum* 以及 indexes 方法傳回的 void* 指向由 Pixels 類別管理的像素資料。 Pixels 類別負責釋放與像素檢視相關聯的資源。 這表示永遠不應將指標傳遞給 delete() 或 free()。

像素檢視是一個小型影像,可以在其中存取、定址和更新像素,如下列範例所示,該範例產生類似於右側的影像(減去線條和文字)

#include <Magick++.h> #include <iostream> using namespace std; using namespace Magick; int main(int argc,char **argv) { InitializeMagick(*argv); // 建立基礎影像 Image image(Geometry(254,218), "white"); // 將影像類型設定為 TrueColor DirectClass 表示法。 image.type(TrueColorType); // 確保基礎影像只有一個參考 // 如果未完成此操作,則不會修改影像像素。 image.modifyImage(); // 配置像素檢視 Pixels view(image); // 將錨定在 38x36 且大小為 160x230 的區域中的所有像素設定為綠色。 size_t columns = 196; size_t rows = 162; Color green("green"); Quantum *pixels = view.get(38,36,columns,rows); for ( ssize_t row = 0; row < rows ; ++row ) for ( ssize_t column = 0; column < columns ; ++column ) { *pixels++=QuantumRange*green.quantumRed(); *pixels++=QuantumRange*green.quantumGreen(); *pixels++=QuantumRange*green.quantumBlue(); } // 將變更儲存到影像。 view.sync(); // 將錨定在 86x72 且大小為 108x67 的區域中的所有像素設定為黃色。 columns = 108; rows = 67; Color yellow("yellow"); pixels = view.get(86,72,columns,rows); for ( ssize_t row = 0; row < rows ; ++row ) for ( ssize_t column = 0; column < columns ; ++column ) { *pixels++=QuantumRange*yellow.quantumRed(); *pixels++=QuantumRange*yellow.quantumGreen(); *pixels++=QuantumRange*yellow.quantumBlue(); } view.sync(); // 將位置 108,94 的像素設定為紅色 Color red("red"); pixels = view.get(108,94,1,1); *pixels++=QuantumRange*red.quantumRed(); *pixels++=QuantumRange*red.quantumGreen(); *pixels++=QuantumRange*red.quantumBlue(); // 將變更儲存到影像。 view.sync(); image.write( "logo.png" ); }

Pixels 支援下列方法

像素快取方法

方法

傳回值

簽章

說明

get

Quantum*

const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_

將圖像中由指定矩形區域定義的讀寫像素傳輸到像素緩存。修改後的像素隨後可以通過 *sync* 傳輸回圖像。 返回值僅供像素訪問使用。它永遠不應該被釋放。

getConst

const Quantum*

const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_

將圖像中由指定矩形區域定義的唯讀像素傳輸到像素緩存。

set

Quantum*

const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_

分配一個像素緩存區域來存儲由區域矩形定義的圖像像素。 該區域隨後通過 *sync* 從像素緩存傳輸到圖像。 返回值僅供像素訪問使用。它永遠不應該被釋放。

sync

void

void

將圖像緩存像素傳輸到圖像。

indexes

void*

void

返回與最後一次 getgetConstset 調用定義的像素區域相對應的偽彩色像素索引。僅對偽彩色和 CMYKA 圖像有效。像素索引(類型為 *void* 的數組,typedef 為 *Quantum*,它本身 typedef 為 *unsigned char* 或 *unsigned short*,具體取決於 *QuantumDepth* 定義的值)提供了圖像中每個像素的顏色表索引(請參閱 colorMap)。對於 CMYKA 圖像,索引代表黑色通道。 返回值僅供像素訪問使用。它永遠不應該被釋放。

x

int

void

視圖的左縱坐標

y

int

void

視圖的上縱坐標

columns

size_t

void

視圖的寬度

rows

size_t

void

視圖的高度