2016-06-19 5 views
0

私はjpgイメージのピクセルの色を取得しようとしています。オンラインで見つけることができるすべてのチュートリアルは、もはや存在しないピクセルパケットを使用すると言います。検索とGoogleを介して検索私はgetvirtualpixelsが新しい方法かもしれないが、そのdoesntが最新版に存在するように見えた。どのようにして画像キャッシュを持つ画像からピクセルの色を取得するのですか?私はピクセルbtwを設定する必要はありません。 windows10とビジュアルスタジオ2015を使用Magick ++はピクセルカラーを取得します。ピクセルパケットはもう存在しないようです。

答えて

2

PixelPacket構造体はQuantumデータ型へのポインタに置き換えられました。 Porting to ImageMagick Version 7から、理解しなければならない重要なことは、ピクセルが動的な部分(または以前は「チャネル」と呼ばれていた「特色」)を持つことができることです。

ImageMagickバージョン7は、1から32までの任意の数のチャンネルをサポートしており、Quantumタイプのピクセルチャンネルの配列を返す単一のメソッドで簡単にアクセスできます。あなたは今、決定論を扱うオーサリングコードを担当している

(右用語ということでしょうか?)ピクセルチャンネル。たとえば...

Magick::Image rose("rose:"); 
const Magick::Quantum * q = rose.getConstPixels(5, 5, 1, 1); 
size_t channel_length = rose.channels(); 
for (size_t k = 0; k < channel_length; k++) { 
    std::cout << "Channel " << k << " = "; 
    std::cout << q[k] << " of " << QuantumRange << std::endl; 
} 
/** Outputs 
    ------- 
    Channel 0 = 13107 of 65535 
    Channel 1 = 12079 of 65535 
    Channel 2 = 11308 of 65535 
*/ 

あなたのコードを見て、またはあなたのフィニアルの目標がどうなるか理解しなければ、私はあなたが本当にだけのRGB情報を欲しいよね。その場合、Magick::Image.getColorは動作します。

Magick::Image rose("rose:"); 
Magick::Color pixelColor = rose.pixelColor(5, 5); 

std::cout << "Channel 0 = "; 
std::cout << pixelColor.quantumRed() << " of " << QuantumRange << std::endl; 
std::cout << "Channel 1 = "; 
std::cout << pixelColor.quantumGreen() << " of " << QuantumRange << std::endl; 
std::cout << "Channel 2 = "; 
std::cout << pixelColor.quantumBlue() << " of " << QuantumRange << std::endl; 
/** Outputs 
    ------- 
    Channel 0 = 13107 of 65535 
    Channel 1 = 12079 of 65535 
    Channel 2 = 11308 of 65535 
*/ 

しかし、!時には、すでに作業しているフォーマットにイメージデータをエクスポートする方が簡単です。たとえば、Green値はシングルポイント浮動小数点リストとしてのみ必要な場合があります。

Magick::Image rose("rose:"); 
Magick::PixelData pixelBlob(rose, "G", Magick::FloatPixel); 
float * buffer = (float *)pixelBlob.data(); 
// ... 
関連する問題