Magick++ 使用一組有限的樣板引數類型。目前的樣板引數類型為
容器具有 後端插入序列 特性的容器。序列支援正向迭代器,而後端插入序列支援通過 push_back() 附加元素的額外能力。常見的相容容器類型是 STL < vector > 和 <list > 樣板容器。這個樣板引數通常用於表示一個輸出容器,其中可以附加一個或多個影像幀。像 STL <vector > 這樣具有給定預設「容量」的容器,可能需要通過 reserve() 將其「容量」調整為更大的「容量」,以便支援預期的最終「大小」。由於 Magick++ 影像非常小,因此 STL < vector > 的預設容量很可能足以應付大多數情況。InputIterator
用於表示容器中位置的輸入迭代器。這些樣板引數通常用於表示元素範圍,其中 first_ 表示要處理的第一個元素,而 last_ 表示要停止的元素。在處理容器的全部內容時,知道 STL 容器通常提供 begin() 和 end() 方法來分別返回與第一個和最後一個元素對應的輸入迭代器會很有幫助。
以下是如何將 GIF 動畫中的幀“test_image_anim.gif” 水平附加並將生成的影像寫入文件 appended_image.miff 的範例
#include <list> #include <Magick++.h> using namespace std; using namespace Magick; int main(int argc,char **argv) { InitializeMagick(*argv); list<Image> imageList; readImages( &imageList, "test_image_anim.gif" ); Image appended; appendImages( &appended, imageList.begin(), imageList.end() ); appended.write( "appended_image.miff" ); return 0; }
下表顯示了可用於對影像幀序列進行操作的 Magick++ 特定 STL 演算法
|
|
|
|
InputIterator first_, InputIterator last_ | 為一系列影像幀製作動畫。影像幀會依次顯示,產生動畫效果。動畫選項取自第一個影像幀。目前此功能僅在 X11 下支援。 |
|
Image *appendedImage_, InputIterator first_, InputIterator last_, bool stack_ = false | 附加一系列影像幀,將結果寫入 appendedImage_。所有輸入影像幀必須具有相同的寬度或高度。相同寬度的影像幀會從上到下堆疊。相同高度的影像幀會從左到右堆疊。如果 stack_ 參數為 false,則矩形影像幀會從左到右堆疊,否則會從上到下堆疊。 |
|
Image *averagedImage_, InputIterator first_, InputIterator last_ | 計算一系列影像幀的平均值,將結果寫入 averagedImage_。所有輸入影像幀的像素大小必須相同。 |
|
容器 *coalescedImages_,輸入迭代器 first_,輸入迭代器 last_ |
建立一個合併的影像序列,方法是「播放」影像序列(觀察頁面偏移和處置方法),以建立一個新的影像序列,其中所有影格都是完整大小且完全渲染。請注意,如果原始影像序列依賴於頁面偏移和處置方法,則結果序列將比原始序列更大(可能大得多)。這對於具有頁面偏移和處置方法的 GIF 動畫序列很有用。結果影像序列通過 *coalescedImages_* 返回。 |
|
容器 *deconstructedImages_,輸入迭代器 first_,輸入迭代器 last_ | 將影像序列分解成組成部分。這對於建立 GIF 或 MNG 動畫序列很有用。輸入序列由 *first_* 和 *last_* 指定,解構的影像通過 *deconstructedImages_* 返回。 |
|
InputIterator first_, InputIterator last_ | 顯示一系列影像影格。通過使用彈出選單,可以依次選擇影像影格。此功能在 X11 下完全受支持,但在其他環境中可能僅受有限支持。 注意:如果影像格式與顯示視覺效果不兼容(例如,彩色映射顯示器上的 JPEG),則原始影像將被更改。如果這是個問題,請使用原始影像的副本。 |
|
影像 *flattendImage_,輸入迭代器 first_,輸入迭代器 last_ | 將表示影像圖層的一系列影像影格合併為單個合成表示。*flattendImage_* 參數指向要用扁平化影像更新的現有影像。此功能對於將 Photoshop 圖層組合成單個影像很有用。 |
|
容器 *fourierImages_,const Image &image_ | 通過 *fourierImages_* 實現影像的離散傅立葉變換 (DFT) 作為幅度/相位影像對。 |
|
容器 *fourierImages_,const Image &image_,const bool magnitude_ | 通過 *fourierImages_* 實現影像的離散傅立葉變換 (DFT) 作為幅度/相位或實部/虛部影像對。 |
|
輸入迭代器 first_,輸入迭代器 last_,const 影像 & mapImage_,bool dither_, bool measureError_ = false | 用參考影像中最接近的顏色替換一系列影像的顏色。將 *dither_* 設置為 *true* 以啟用抖動。將 *measureError_* 設置為 *true* 以評估量化誤差。 |
|
容器 *montageImages_,輸入迭代器 first_,輸入迭代器 last_,const 蒙太奇 &montageOpts_ | 通過組合多個單獨的影像影格來建立合成影像。根據平鋪設置和蒙太奇的影像影格數量,可以在輸出容器 *montageImages_* 中生成多個影格。蒙太奇選項通過參數 *montageOpts_* 提供。在第一個影像影格中設置的選項(背景顏色、邊框顏色、遮罩顏色、畫筆顏色、字體 和 字體大小)也被 *montageImages()* 用作選項。 |
|
容器 *morphedImages_, 輸入迭代器 first_, 輸入迭代器 last_, size_t frames_ | 對一系列圖像幀進行變形。此算法通過添加由 frames_ 指定的介入幀數來擴展圖像幀的數量(輸出到容器 morphedImages_),以便在作為動畫播放時,原始幀相互變形(混合)。 |
|
圖像 *mosaicImage_, 輸入迭代器 first_, 輸入迭代器 last_ | 嵌入多個圖像以形成單個連貫的圖像。mosicImage_ 參數使用由 first_ 到 last_ 表示的圖像序列構建的馬賽克進行更新。 |
輸入迭代器 first_, 輸入迭代器 last_, bool measureError_ = false | 使用當前的量化設置對圖像中的顏色進行量化。將 measureError_ 設置為 true 以測量量化誤差。 | |
|
容器 *sequence_, const std::string &imageSpec_ | 將一系列圖像幀讀取到現有容器中(附加到容器 sequence_),圖像名稱在 UTF-8 字符串 imageSpec_ 中指定。 |
容器 *sequence_, const Blob &blob_ | 從 Blob blob_ 中將一系列圖像幀讀取到現有容器(附加到容器 sequence_)。 | |
|
輸入迭代器 first_, 輸入迭代器 last_, const std::string &imageSpec_, bool adjoin_ = true | 將容器中的圖像寫入由字符串 imageSpec_ 指定的文件。將 adjoin_ 設置為 false 以通過通配符 imageSpec_ (例如 image%02d.miff)寫入一組圖像幀。 通配符必須是以下之一%0Nd、%0No 或 %0Nx. 注意:如果選擇的圖像格式支持的顏色少於原始圖像或已請求量化,則原始圖像將被量化為更少的顏色。如果這是個問題,請使用原始圖像的副本。 |
輸入迭代器 first_, 輸入迭代器 last_, Blob *blob_, bool adjoin_ = true | 將容器中的圖像寫入由 Blob blob_ 指定的內存 BLOB。將 adjoin_ 設置為 false 以通過通配符 imageSpec_(例如 image%02d.miff)寫入一組圖像幀。 注意:如果選擇的圖像格式支持的顏色少於原始圖像或已請求量化,則原始圖像將被量化為更少的顏色。如果這是個問題,請使用原始圖像的副本。 |
此外,我們還支持以下尚未記錄的方法:combineImages()
、evaluateImages()
、mergeImageLayers()
、optimizeImageLayers()
、optimizePlusImageLayers()
和 separateImages()
。
unary_function<Arg, Result>並期望派生類實現以下形式的方法
Result operator()( Arg argument_);該方法由使用函數對象的算法調用。對於由 Magick++ 定義的一元函數對象,被調用的函數如下所示
void operator()( Image &image_);典型的實現類似於
void operator()( Image &image_ )其中 contrast 是一個圖像方法,_sharpen 是由其構造函數存儲在函數對象中的一個參數。由於構造函數可能是多態的,因此給定的函數對象可能有多個構造函數,並根據提供的參數選擇適當的圖像方法。
{
image_.contrast( _sharpen );
}
本質上,單參數函數對象(由 Magick++ 提供)僅提供建構對象的方法,該對象會快取參數,供稍後由設計用於單參數函數對象的演算法使用。 Image 類別提供的每個演算法都對應一個單參數函數對象,並且可以使用與 Image 類別中每個同義方法相容的建構函數。
下表顯示了 Magick++ 為支援影像操作而提供的單參數函數對象
函數對象 | 建構函數簽章 | 說明 |
size_t width, size_t height, unsigned offset = 0 |
對影像套用自適應閾值。如果理想的閾值水平事先未知,或者如果照度梯度在影像中不恆定,則自適應閾值很有用。自適應閾值的工作原理是評估像素區域(由 *width* 和 *height* 指定大小)的均值(平均值),並使用均值作為閾值。為了消除背景中的殘留雜訊,可以通過從均值中減去常數 *offset*(默認值為零)來調整閾值,以計算閾值。 |
|
|
NoiseType noiseType_ | 使用指定的雜訊類型向影像添加雜訊。 |
affineTransformImage |
const DrawableAffine &affine_ |
通過指定的仿射(或自由變換)矩陣變換影像。 |
|
const std::string &text_, const Geometry &location_ | 使用指定的文字、邊界區域、放置重力和旋轉角度進行註釋。如果 *boundingArea_* 無效,則邊界區域為整個影像。 |
std::string text_, const Geometry &boundingArea_, GravityType gravity_ | 使用指定的文字、邊界區域和放置重力進行註釋。如果 *boundingArea_* 無效,則邊界區域為整個影像。 | |
const std::string &text_, const Geometry &boundingArea_, GravityType gravity_, double degrees_, | 使用指定的文字、邊界區域、放置重力和旋轉角度進行註釋。如果 *boundingArea_* 無效,則邊界區域為整個影像。 | |
const std::string &text_, GravityType gravity_ | 使用文字(邊界區域為整個影像)和放置重力進行註釋。 | |
|
const double radius_ = 1, const double sigma_ = 0.5 | 模糊影像。 radius_ 參數指定高斯的半徑(以像素為單位),不包括中心像素。 sigma_ 參數指定拉普拉斯算子的標準差(以像素為單位)。 |
|
const Geometry &geometry_ = "6x6+0+0" | 為影像添加邊框。邊框顏色由 *borderColor* 屬性指定。 |
|
const double radius_ = 1, const double sigma_ = 0.5 | 炭筆效果影像(看起來像炭筆素描)。 radius_ 參數指定高斯的半徑(以像素為單位),不包括中心像素。 sigma_ 參數指定拉普拉斯算子的標準差(以像素為單位)。 |
|
const Geometry &geometry_ | 裁剪影像(移除影像的垂直或水平子區域) |
|
const size_t opacityRed_, const size_t opacityGreen_, const size_t opacityBlue_, const Color &penColor_ | 使用畫筆顏色對影像進行著色,並為紅色、綠色和藍色量子使用指定的百分比不透明度。 |
const size_t opacity_, const Color &penColor_ | 使用畫筆顏色對影像進行著色,並使用指定的百分比不透明度。 | |
|
const std::string &comment_ | 為影像添加註釋(將註釋字串添加到影像中)。默認情況下,每個影像都使用其檔名進行註釋。使用此方法為影像指定特定的註釋。您也可以選擇通過嵌入特殊格式字元來包含影像檔名、類型、寬度、高度或其他影像屬性。 |
|
const Image &compositeImage_, ssize_t xOffset_, ssize_t yOffset_, CompositeOperator compose_ = InCompositeOp | 使用指定的演算法將一個影像合成到另一個影像上的指定偏移處 |
const Image &compositeImage_, const Geometry &offset_, CompositeOperator compose_ = InCompositeOp | ||
|
void | 壓縮影像(在記憶體中以行程編碼重新編碼影像)。 |
|
size_t sharpen_ | 調整影像對比度(增強影像中的強度差異) |
|
const Geometry &geometry_ | 裁剪影像(原始影像的子區域) |
Image |
int amount_ | 循環影像色彩映射表 |
|
void | 去斑點影像(減少斑點雜訊) |
|
const Drawable &drawable_ | 在影像上繪製形狀或文字。 |
const std::list<Drawable > &drawable_ | 使用 STL 清單中包含的一組 Drawable 物件,在影像上繪製形狀或文字。使用此方法可以提高繪製效能,並允許將繪製物件批次組合在清單中以供重複使用。 | |
|
size_t radius_ = 0.0 | 邊緣偵測影像(突出顯示影像中的邊緣)。 半徑是像素鄰域的半徑。 指定半徑為零表示自動選擇半徑。 |
|
const double radius_ = 1, const double sigma_ = 0.5 | 浮雕影像(以 3D 效果突出顯示邊緣)。radius_ 參數指定高斯的半徑(以像素為單位),不包括中心像素。 sigma_ 參數指定拉普拉斯算子的標準差(以像素為單位)。 |
|
void | 增強影像(最小化雜訊) |
|
void | 等化影像(直方圖等化) |
|
void | 翻轉影像(在垂直方向上反映每個掃描線) |
ColorImage |
ssize_t x_, ssize_t y_, const Color &fillColor_ | 將顏色填滿至與目標像素顏色相符且為目標像素鄰居的像素。在判斷顏色匹配時使用目前的模糊設定。 |
const Geometry &point_, const Color &fillColor_ | ||
ssize_t x_, ssize_t y_, const Color &fillColor_, const Color &borderColor_ | 從目標像素開始將顏色填滿至像素,並在與指定邊框顏色相符的像素處停止。在判斷顏色匹配時使用目前的模糊設定。 | |
const Geometry &point_, const Color &fillColor_, const Color &borderColor_ | ||
TextureImage |
ssize_t x_, ssize_t y_, const Image &texture_ | 將紋理填滿至與目標像素顏色相符且為目標像素鄰居的像素。在判斷顏色匹配時使用目前的模糊設定。 |
const Geometry &point_, const Image &texture_ | ||
ssize_t x_, ssize_t y_, const Image &texture_, const Color &borderColor_ | 從目標像素開始將紋理填滿至像素,並在與指定邊框顏色相符的像素處停止。在判斷顏色匹配時使用目前的模糊設定。 | |
const Geometry &point_, const Image &texture_, const Color &borderColor_ | ||
|
void | 水平翻轉影像(在水平方向上反映每個掃描線) |
|
const Geometry &geometry_ = "25x25+6+6" | 在影像周圍加上裝飾性邊框 |
size_t width_, size_t height_, ssize_t x_, ssize_t y_, ssize_t innerBevel_ = 0, ssize_t outerBevel_ = 0 | ||
|
double gamma_ | Gamma 校正影像(統一的紅色、綠色和藍色校正)。 |
double gammaRed_, double gammaGreen_, double gammaBlue_ | Gamma 校正影像的紅色、綠色和藍色通道。 | |
|
double width_, double sigma_ | 高斯模糊影像。「width_」指定要包含在捲積遮罩中的相鄰像素數量。 例如,寬度為 1 會產生(標準)3x3 捲積遮罩。高斯鐘形曲線的標準差由「sigma_」指定。 |
|
double factor_ | 內爆影像(特殊效果) |
|
const Image &phaseImage_, const bool magnitude_ | 實作影像的反向離散傅立葉變換 (DFT),可以是強度/相位或實數/虛數影像對。 |
|
const string &label_ | 為影像指定標籤。使用此選項可以為影像指定特定的標籤。您也可以選擇在標籤中包含影像檔名、類型、寬度、高度或場景編號,方法是在標籤中嵌入特殊格式字元。如果字串的第一個字元是 @,則會從由字串中其餘字元命名的檔案中讀取影像標籤。轉換為 Postscript 時,使用此選項可以指定要列印在影像上方的標頭字串。 |
levelImage |
const double black_point, const double white_point, const double mid_point=1.0 |
調整影像色階。通過將落在指定的白點和黑點之間的顏色縮放到可用的全部量子範圍來調整影像的色階。提供的參數表示黑點、中間點(伽瑪)和白點。黑點指定影像中最暗的顏色。比黑點暗的顏色設置為零。中間點(伽瑪)指定要應用於影像的伽瑪校正。白點指定影像中最亮的顏色。比白點亮的顏色設置為最大量子值。黑點和白點的有效範圍為 0 到 QuantumRange,而中間點(伽瑪)的有效範圍為 0 到 10。 |
levelChannelImage |
const Magick::ChannelType channel, const double black_point, const double white_point, const double mid_point=1.0 |
調整影像通道的色階。通過將落在指定的白點和黑點之間的值縮放到可用的全部量子範圍來調整影像通道的色階。提供的參數表示黑點、中間點(伽瑪)和白點。黑點指定影像中最暗的顏色。比黑點暗的顏色設置為零。中間點(伽瑪)指定要應用於影像的伽瑪校正。白點指定影像中最亮的顏色。比白點亮的顏色設置為最大量子值。黑點和白點的有效範圍為 0 到 QuantumRange,而中間點(伽瑪)的有效範圍為 0 到 10。 |
|
ChannelType layer_ | 從影像中提取圖層。使用此選項可以從影像中提取特定的圖層。例如,MatteLayer 可用於從影像中提取不透明度值。 |
|
void | 按整數大小放大影像 |
|
const Image &mapImage_ , bool dither_ = false | 使用參考影像中最接近的顏色重新映射影像顏色。將 dither_ 設置為 true 會對影像應用 Floyd/Steinberg 誤差擴散。默認情況下,色彩縮減會選擇最能代表原始影像的最佳顏色集。或者,您可以使用此選項從影像檔案中選擇特定的顏色集。 |
Image |
const Color &target_, unsigned int matte_, ssize_t x_, ssize_t y_, PaintMethod method_ | 使用遮罩值填充指定區域 |
medianFilterImage | const double radius_ = 0.0 | 通過用圓形鄰域中的中間顏色替換每個像素分量來過濾影像 |
|
void | 按整數大小縮小影像 |
|
double brightness_, double saturation_, double hue_ | 調整影像的色相、飽和度和亮度百分比。飽和度和亮度的調整是相對於當前值的比率(1.0 表示不變)。色相的調整是相對於當前位置從 -180 度到 +180 度的絕對旋轉,對應於 0 到 2.0 的參數範圍(1.0 表示不變)。 |
|
bool grayscale_ = false | 反轉影像中的顏色。 將每個像素替換為其互補色(白色變為黑色,黃色變為藍色,等等)。 設置灰度僅反轉影像中的灰度值。 |
|
void | 標準化影像(通過將像素值標準化為跨越整個顏色值範圍來增加對比度)。 |
|
size_t radius_ = 3 | 油畫影像(影像看起來像油畫) |
|
size_t opacity_ | 設定或減弱影像中的透明度通道。如果影像像素是不透明的,則它們會被設定為指定的透明度值,否則它們會與提供的透明度值混合。 opacity_ 的值範圍從 0(完全不透明)到 *QuantumRange*。定義 *OpaqueOpacity* 和 *TransparentOpacity* 分別用於指定完全不透明或完全透明。 |
|
const Color &opaqueColor_, const Color &penColor_ | 將匹配 opaqueColor_ 的像素顏色更改為指定的 penColor_。 |
|
bool measureError_ = false | 量化影像(減少顏色數量)。將 measureError_ 設定為 true 以計算誤差屬性。 |
|
const Geometry &geometry_ = "6x6+0+0", bool raisedFlag_ = false | 浮雕影像(加亮或加深影像的邊緣,以產生 3D 浮雕或凹陷效果) |
Image |
void | 使用雜訊峰值消除濾波器減少影像中的雜訊。 |
size_t order_ | ||
|
int columns_, ssize_t rows_ | 滾動影像(按指定的列數和行數垂直和水平滾動影像) |
|
double degrees_ | 逆時針旋轉影像指定的度數 |
|
const Geometry &geometry_ | 使用像素取樣演算法調整影像大小 |
|
const Geometry &geometry_ | 使用簡單比率演算法調整影像大小 |
|
double clusterThreshold_ = 1.0, double smoothingThreshold_ = 1.5 |
通過分析顏色分量的直方圖並使用模糊 C 均值技術識別均勻的單元來分割(合併相似的影像分量)。還使用 *quantizeColorSpace* 和 *verbose* 影像屬性。指定 *clusterThreshold_* 作為每個叢集必須超過的像素數,以便被視為有效叢集。 *SmoothingThreshold_* 消除了直方圖二階導數中的雜訊。隨著值的增加,您可以預期二階導數會更平滑。 預設值為 1.5。 |
|
double azimuth_ = 30, double elevation_ = 30, bool colorShading_ = false |
使用遠處光源為影像添加陰影。將 *azimuth_* 和 *elevation_* 指定為光源的位置。預設情況下,陰影效果為灰度影像。將 c*olorShading_* 設定為 *true* 可為影像的紅色、綠色和藍色分量添加陰影。 |
|
const double radius_ = 1, const double sigma_ = 0.5 | 銳化影像中的像素。radius_ 參數指定高斯的半徑(以像素為單位),不包括中心像素。 sigma_ 參數指定拉普拉斯算子的標準差(以像素為單位)。 |
|
const Geometry &geometry_ | 從影像邊緣剃除像素。 |
|
double xShearAngle_, double yShearAngle_ | 剪切圖像(通過沿 X 或 Y 軸滑動圖像來創建平行四邊形)。剪切會沿著 X 或 Y 軸滑動圖像的一條邊,從而創建一個平行四邊形。X 方向剪切會沿著 X 軸滑動邊緣,而 Y 方向剪切會沿著 Y 軸滑動邊緣。剪切量由剪切角度控制。對於 X 方向剪切,x 度是相對於 Y 軸測量的,同樣,對於 Y 方向剪切,y 度是相對於 X 軸測量的。剪切圖像後留下的空白三角形將填充為定義為 *borderColor* 的顏色。 |
|
double factor_ | 曝光圖像(類似於在顯影過程中將攝影膠片曝光於光線時看到的效果) |
|
size_t amount_ = 3 | 在指定數量內隨機散佈圖像中的像素 |
|
const Image &watermark_ | 向圖像添加數位浮水印(基於第二個圖像) |
|
const Image &rightImage_ | 創建一個在使用紅藍眼鏡觀看時顯示立體效果的圖像(左側為紅色圖像,右側為藍色圖像) |
|
double degrees_ | 旋轉圖像(圖像像素旋轉度數) |
|
const Image &texture_ | 在圖像背景上疊加紋理 |
|
double threshold_ | 門檻值圖像 |
|
const Geometry &imageGeometry_ | 根據圖像和裁剪幾何形狀變換圖像。裁剪幾何形狀是可選的。 |
const Geometry &imageGeometry_, const Geometry &cropGeometry_ | ||
|
const Color &color_ | 將遮罩圖像添加到圖像,將與顏色匹配的像素設置為透明。 |
|
void | 從圖像中修剪掉背景顏色的邊緣。 |
|
double amplitude_ = 25.0, double wavelength_ = 150.0 | 沿正弦波改變圖像。 |
|
const Geometry &geometry_ | 將圖像縮放到指定大小。 |
函數對象可用於在圖像幀上設置屬性,這些屬性等效於 Image 對象中的方法。這些函數對象允許使用 f 在一系列圖像幀上設置選項or_each().
以下代碼是如何在 GIF 動畫中將顏色“紅色”設置為透明的示例
list<image> images; readImages( &images, "animation.gif" ); for_each ( images.begin(), images.end(), transparentImage( "red" ) ); writeImages( images.begin(), images.end(), "animation.gif" );
可用於設置圖像屬性的函數對象是
|
|
|
|
|
bool | bool flag_ | 將圖像合併為單個多圖像文件。 |
|
bool | bool flag_ | 控制渲染的 Postscript 和 Postscript 或 TrueType 字體的反鋸齒。默認情況下啟用。 |
DelayImage |
size_t (0 到 65535) | size_t delay_ | 以 1/100 秒為單位的時間(0 到 65535),在顯示動畫序列中的下一張圖像之前必須經過的時間。此選項對於調節 Netscape 中 GIF 圖像序列的動畫很有用。 |
IterationsImage |
size_t | size_t iterations_ | 動畫循環的次數(例如 Netscape 循環擴展名)。 |
ColorImage |
Color | const Color &color_ | 圖像背景顏色 |
TextureImage |
std::string | const string &texture_ | 要用作背景紋理的圖像。 |
Image |
Color | const Color &color_ | 圖像邊框顏色 |
|
Color | const Color &boxColor_ | 註釋文本在其上呈現的基色。 |
BluePrimaryImage |
double x & y | double x_, double y_ | 色度藍基色點(例如 x=0.15,y=0.06) |
GreenPrimaryImage |
double x & y | double x_, double y_ | 綠色主光點的色度(例如 x=0.3, y=0.6) |
紅色主光點影像 |
double x & y | double x_, double y_ | 紅色主光點的色度(例如 x=0.64, y=0.33) |
白點影像 |
double x & y | double x_, double y_ | 白點的色度(例如 x=0.3127, y=0.329) |
|
雙精度浮點數 | 雙精度浮點數 fuzz_ | 在此距離內的顏色被視為相同。許多演算法會搜尋目標顏色。預設情況下,顏色必須完全一致。使用此選項可以匹配 RGB 色彩空間中接近目標顏色的顏色。 |
|
Color | size_t index_, const Color &color_ | 顏色調色板索引處的顏色。 |
色彩空間影像 | 色彩空間類型 | 色彩空間類型 colorSpace_ | 用於表示影像像素顏色的色彩空間(例如 CMYK)。影像像素始終儲存為 RGB(A),但 CMY(K) 除外。 |
|
合成運算子 | 合成運算子 compose_ | 在隱式使用合成時(例如影像扁平化)要使用的合成運算子。 |
Image |
壓縮類型 | 壓縮類型 compressType_ | 影像壓縮類型。預設值是指定影像檔案的壓縮類型。 |
|
幾何 (預設 72x72) | const 幾何 &density_ | 影像的垂直和水平解析度(以像素為單位)。此選項在解碼 Postscript 或 Portable Document 頁面時指定影像密度。通常與 *psPageSize* 一起使用。 |
|
size_t (8 或 16) | size_t depth_ | 影像深度。用於在讀取或寫入原始影像時指定位元深度,或在輸出格式支援多種深度時使用。預設值為 ImageMagick 編譯時使用的量子深度。 |
|
位元組順序類型 | 位元組順序類型 endian_ | 為支援的格式指定(或取得)位元組順序選項。 |
|
std::string | const std::string &fileName_ | 影像檔案名稱。 |
|
Color | const Color &fillColor_ | 填滿繪製物件時要使用的顏色 |
|
濾鏡類型 | 濾鏡類型 filterType_ | 調整影像大小時要使用的濾鏡。使用的縮小濾鏡對調整影像大小所需的時間和產生的品質有顯著影響。預設濾鏡為 *Lanczos*,經證明在縮小影像時可以產生良好的效果。 |
|
std::string | const std::string &font_ | 文字渲染字型。如果字型是完整的 X 伺服器字型名稱,則從 X 伺服器取得字型。若要使用 TrueType 字型,請在 TrueType 檔案名稱前面加上 @。否則,請指定 Postscript 字型名稱(例如「helvetica」)。 |
Image |
size_t | size_t pointSize_ | 文字渲染字型點大小 |
方法影像 |
size_t { 0 = 未指定處置方式, 1 = 不要處置圖形, 3 = 使用背景顏色覆蓋圖形, 4 = 使用先前的圖形覆蓋圖形。 } |
size_t disposeMethod_ | 圖層處置方法。此選項用於在建立 GIF 動畫時控制如何渲染連續影格(如何處置前一個影格)。 |
類型影像 |
交錯類型 | 交錯類型 interlace_ | 交錯方案的類型(預設為 *NoInterlace*)。此選項用於指定原始影像格式(例如 RGB 或 YUV)的交錯方案類型。*NoInterlace* 表示不交錯,*LineInterlace* 使用掃描線交錯,而 *PlaneInterlace* 使用平面交錯。*PartitionInterlace* 類似於 *PlaneInterlace*,不同之處在於不同的平面會儲存到個別的檔案(例如 image.R、image.G 和 image.B)。使用 *LineInterlace* 或 *PlaneInterlace* 建立交錯 GIF 或漸進式 JPEG 影像。 |
|
bool | bool isValid_ | 設定圖片有效性。如果參數為 false,則有效圖片將變為空白(無效)。 |
|
std::string | const std::string &label_ | 圖片標籤 |
|
雙精度浮點數 | double lineWidth_ | 繪製線條、圓形、橢圓形等的線條寬度。請參閱 Drawable。 |
|
std::string | const std::string &magick_ | 取得圖片格式(例如「GIF」) |
|
bool | bool matteFlag_ | 如果圖片具有透明度,則為 True。如果設定為 True,則在圖片具有遮罩通道時儲存遮罩通道,否則建立不透明的遮罩通道。 |
|
Color | const Color &matteColor_ | 圖片遮罩(邊框)顏色 |
Image |
bool | bool flag_ | 將圖片轉換為黑白 |
|
Geometry | const Geometry &pageSize_ | 圖片畫布的偏好大小和位置。
使用此選項以每英寸點數指定 Postscript 頁面的尺寸和位置,或以像素為單位指定 TEXT 頁面的尺寸和位置。此選項通常與density一起使用。 Page 也可用於放置 GIF 圖片(例如動畫中的場景) |
|
Color | const Color &penColor_ | 在圖片上註釋或繪製時使用的筆顏色。 |
|
Image | const Image & penTexture_ | 要用於繪製的紋理圖片(類似於 penColor)。 |
|
Color | size_t x_, size_t y_, const Color &color_ | 取得/設定位置 x 和 y 的像素顏色。 |
|
Geometry | const Geometry &pageSize_ | Postscript 页面大小。使用此選項以每英寸點數指定 Postscript 页面的尺寸,或以像素為單位指定 TEXT 页面的尺寸。此選項通常與density一起使用。 |
|
size_t (0 到 100) | size_t quality_ | JPEG/MIFF/PNG 壓縮等級(預設值為 75)。 |
ColorsImage |
size_t | size_t colors_ | 圖片中的偏好顏色數量。圖片中的實際顏色數量可能會少於您的要求,但絕不會超過。唯一顏色數量少於使用此選項指定的數量的圖片,將會移除任何重複或未使用的顏色。 |
ColorSpaceImage |
色彩空間類型 | 色彩空間類型 colorSpace_ | 用於量化顏色的色彩空間(預設值為 RGB)。經驗證據顯示,與 RGB 空間中的距離相比,YUV 或 YIQ 等色彩空間中的距離更接近於感知顏色差異。減少圖片顏色時,這些色彩空間可能會產生更好的效果。 |
DitherImage |
bool | bool flag_ | 對圖片套用 Floyd/Steinberg 誤差擴散。抖動的基本策略是透過平均多個相鄰像素的強度,以空間解析度換取強度解析度。減少顏色時輪廓嚴重的圖片可以使用此選項來改善。必須設定 quantizeColors 或 monochrome 選項,此選項才會生效。 |
TreeDepthImage |
size_t (0 到 8) | size_t treeDepth_ | 量化顏色分類樹的深度。值 0 或 1 允許為顏色簡化演算法選擇最佳樹深度。值 2 到 8 可用於手動調整樹深度。 |
IntentImage |
RenderingIntent | RenderingIntent render_ | 渲染意圖的類型 |
UnitsImage |
ResolutionType | ResolutionType units_ | 圖片解析度的單位 |
|
size_t | size_t scene_ | 圖片場景編號 |
|
Geometry | const Geometry &geometry_ | 原始圖片(不支援寬度和高度資訊的圖片)的寬度和高度。 Size 也可用於影響從多解析度格式(例如 Photo CD、JBIG 或 JPEG)讀取的圖片大小。 |
|
void | 去除圖片的所有描述檔和註解。 | |
|
Color | const Color &strokeColor_ | 繪製物件輪廓時要使用的顏色 |
|
size_t | size_t subImage_ | 圖像序列的子圖像 |
|
size_t | size_t subRange_ | 相對於基礎圖像的圖像數量 |
|
std::string | const std::string &tileName_ | 圖塊名稱 |
|
ImageType | ImageType type_ | 圖像儲存類型。 |
|
bool | bool verboseFlag_ | 列印有關圖像的詳細資訊 |
|
std::string | const std::string &view_ | FlashPix 檢視參數。 |
|
std::string(例如「主機名稱:0.0」) | const std::string &display_ | 要顯示、取得字型或擷取圖像的 X11 顯示器 |
Magick++ 提供 coderInfoList() 函數來支援取得有關 ImageMagick 支援的圖像格式的資訊。ImageMagick 中對圖像格式的支援由稱為「編碼器」的模組提供。使用者提供的容器會根據布林真值表比對進行更新。真值表支援根據 ImageMagick 是否可以讀取格式、寫入格式或支援格式的多個影格來進行比對。任何「不關心」欄位都支援萬用字元規範。透過 coderInfoList() 取得的資料可能有助於準備 GUI 對話方塊或根據 ImageMagick 組建中的支援來決定要寫入的輸出格式。
coderInfoList 的定義為
class CoderInfo { public: enum MatchType { AnyMatch, // match any coder TrueMatch, // match coder if true FalseMatch // match coder if false }; [ remaining CoderInfo methods ] } template <class Container > void coderInfoList( Container *container_, CoderInfo::MatchType isReadable_ = CoderInfo::AnyMatch, CoderInfo::MatchType isWritable_ = CoderInfo::AnyMatch, CoderInfo::MatchType isMultiFrame_ = CoderInfo::AnyMatch );
以下範例顯示如何擷取支援讀取圖像的所有編碼器的清單並列印編碼器屬性(所有列出的格式都將是可讀取的)
list<CoderInfo> coderList; coderInfoList( &coderList, // Reference to output list CoderInfo::TrueMatch, // Match readable formats CoderInfo::AnyMatch, // Don't care about writable formats CoderInfo::AnyMatch); // Don't care about multi-frame support list<CoderInfo>::iterator entry = coderList.begin(); while( entry != coderList.end() ) { cout << entry->name() << ": (" << entry->description() << ") : "; cout << "Readable = "; if ( entry->isReadable() ) cout << "true"; else cout << "false"; cout << ", "; cout << "Writable = "; if ( entry->isWritable() ) cout << "true"; else cout << "false"; cout << ", "; cout << "Multiframe = "; if ( entry->isMultiframe() ) cout << "true"; else cout << "false"; cout << endl; entry ++; }}
Magick++ 提供 colorHistogram 樣板函數來從圖像中擷取色彩直方圖。色彩直方圖會提供每個顏色在圖像中出現次數的計數。直方圖會寫入使用者提供的容器中,例如可能是 <vector> 或 <map>。 使用 <map> 時,Color 會用作索引鍵,以便可以快速查詢顏色的使用次數。寫入 <map> 可能比寫入 <vector> 慢,因為 <map> 會對項目進行排序(依顏色強度)並檢查唯一性。每個直方圖項目都包含在類型 std::pair<Magick::Color,unsigned long> 中,其中配對的第一個成員是 Color,配對的第二個成員是「unsigned long」。使用 <pair>「first」成員來存取 Color,並使用「second」成員來存取 顏色在圖像中出現的次數。
樣板函數宣告如下
template <class Container > void colorHistogram( Container *histogram_, const Image image)
以下範例說明如何使用 <map> 和 <vector> 來擷取色彩直方圖,以及列印格式化的摘要。
使用 <map>
Image image("image.miff"); map<Color,unsigned long> histogram; colorHistogram( &histogram, image ); std::map<Color,unsigned long>::const_iterator p=histogram.begin(); while (p != histogram.end()) { cout << setw(10) << (int)p->second << ": (" << setw(quantum_width) << (int)p->first.redQuantum() << "," << setw(quantum_width) << (int)p->first.greenQuantum() << "," << setw(quantum_width) << (int)p->first.blueQuantum() << ")" << endl; p++; }
Image image("image.miff"); std::vector<std::pair<Color,unsigned long> > histogram; colorHistogram( &histogram, image ); std::vector<std::pair<Color,unsigned long> >::const_iterator p=histogram.begin(); while (p != histogram.end()) { cout << setw(10) << (int)p->second << ": (" << setw(quantum_width) << (int)p->first.redQuantum() << "," << setw(quantum_width) << (int)p->first.greenQuantum() << "," << setw(quantum_width) << (int)p->first.blueQuantum() << ")" << endl; p++; }