Magick::Pixels

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()に渡してはいけません。

ピクセルビューは小さな画像であり、次の例に示すように、ピクセルにアクセス、アドレス指定、および更新できます。これは、右側の画像(線とテキストを除く)に似た画像を生成します。

#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); // 基になる画像への参照が1つしかないことを確認 // これを行わないと、画像ピクセルは変更されません。 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

最後のgetgetConst、またはset呼び出しによって定義されたピクセル領域に対応するPsuedoColorピクセルインデックスを返します。PseudoColorおよびCMYKA画像でのみ有効です。ピクセルインデックス(タイプvoidの配列。これはtypedef Quantumであり、QuantumDepth定義の値に応じてtypedef unsigned charまたはunsigned shortです)は、イメージ内の各ピクセルのカラーマップインデックス(colorMapを参照)を提供します。CMYKA画像の場合、インデックスは黒チャネルを表します。返される値は、ピクセルアクセスのみを目的としています。決して解放しないでください。

x

int

void

ビューの左の座標

y

int

void

ビューの上部座標

columns

size_t

void

ビューの幅

rows

size_t

void

ビューの高さ