文件 • 取得 Magick++ • 安裝 • 回報錯誤
Magick++ API 是 ImageMagick 影像處理函式庫的面向對象 C++ API。
Magick++ 支援受 PerlMagick 啟發的物件模型。影像支援隱式引用計數,因此複製建構函式和賦值幾乎不耗費成本。實際複製影像的成本(如果需要)僅在修改之前發生,並且此副本由 Magick++ 自動管理。取消引用的副本會自動刪除。影像物件支援值(而不是指標)語義,因此在記憶體中同時支援影像的多個世代變得非常簡單。
Magick++ 為 標準樣板庫 (STL) 提供整合支援,以便可以使用可用的強大容器(例如 deque、vector、list 和 map)來編寫類似於 PERL 和 PerlMagick 的程式。提供了 ImageMagick 清單樣式操作的 STL 相容樣板版本,以便可以對儲存在 STL 容器中的多個影像執行操作。
文件
為構成 API 的所有 Magick++ 類別、類別方法和樣板函數提供了詳細的 文件。有關 Magick++ 的入門教學,請參閱 Magick++ 簡介。如果您想更正、增強或擴展教學,我們包含了 來源。
取得 Magick++
Magick++ 作為 ImageMagick 原始碼版本的一部分包含在內,可以透過 HTTP 或 GitHub 取得。
安裝
取得 Magick++ 原始碼後,請遵循這些針對 UNIX 和 Windows 的詳細 安裝說明。
用法
在 Linux 下安裝了一個名為 Magick++-config 的輔助腳本,它有助於回顧編譯和連結使用 Magick++ 的程式所需的編譯選項。例如,以下命令編譯原始碼檔案 demo.cpp 並連結它以產生可執行檔 demo(請注意引號是反引號)
c++ `Magick++-config --cxxflags --cppflags` -O2 -o demo demo.cpp \ `Magick++-config --ldflags --libs`
如果 ImageMagick 不在您的預設系統路徑中,請設定 PKG_CONFIG_PATH 環境變數
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Windows 使用者可以透過手動編輯其中一個 Magick++ 範例程式的專案檔案來開始使用。
請注意,在 Windows(可能還有 Mac)下,可能需要在使用 Magick++ 函式庫之前初始化 ImageMagick 函式庫。此初始化是透過將 ImageMagick DLL 的路徑(假設與您的程式位於同一目錄中)傳遞給 InitializeMagick() 函數呼叫來執行的。這通常是透過提供您的程式路徑 (argv[0]) 來執行的,如下例所示
int main( int argc, char ** argv) { InitializeMagick(*argv); ...
在 Linux、Linux、Cygwin 或任何其他支援在已知位置安裝 ImageMagick 概念的操作環境下,不需要此初始化步驟。
這是一個使用 Magick++ API 的範例程式,可以幫助您入門,magick++.cpp。它讀取影像、裁剪它,並將其以 PNG 影像格式寫入磁碟。
#include <Magick++.h>
#include <iostream>
using namespace std;
using namespace Magick;
int main(int argc,char **argv)
{
InitializeMagick(*argv);
// Construct the image object. Separating image construction from the
// the read operation ensures that a failure to read the image file
// doesn't render the image object useless.
Image image;
try {
// Read a file into image object
image.read( "logo:" );
// Crop the image to specified size (width, height, xOffset, yOffset)
image.crop( Geometry(100,100, 100, 100) );
// Write the image to a file
image.write( "logo.png" );
}
catch( Exception &error_ )
{
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
return 0;
}
回報錯誤
有關使用的問題應直接發送至或報告任何錯誤至 Magick++ 社群論壇。