Bitmap::GetHistogram メソッド (gdiplusheaders.h)
Bitmap::GetHistogram メソッドは、この Bitmap オブジェクトの指定されたカラー チャネルに対して 1 つ以上のヒストグラムを返します。
構文
Status GetHistogram(
[in] HistogramFormat format,
[in] UINT NumberOfEntries,
[out] UINT *channel0,
[out] UINT *channel1,
[out] UINT *channel2,
[out] UINT *channel3
);
パラメーター
[in] format
種類: HistogramFormat
ヒストグラムを作成するチャネルを指定する HistogramFormat 列挙体の要素。
[in] NumberOfEntries
型: UINT
channel0、channel1、channel2、channel3 が指す各配列の要素数 (UINT 型) を指定する整数。 Bitmap::GetHistogram を呼び出す前に、これらの配列にメモリを割り当てる必要があります。 必要な要素数を確認するには、 Bitmap::GetHistogramSize を呼び出します。
[out] channel0
種類: UINT*
最初のヒストグラムを受け取る UINTs の配列へのポインター。
[out] channel1
種類: UINT*
2 番目のヒストグラムがある場合に 2 番目のヒストグラムを受け取る UINTs の配列へのポインター。 2 番目のヒストグラムがない場合は NULL を 渡します。
[out] channel2
種類: UINT*
3 番目のヒストグラムがある場合に 3 番目のヒストグラムを受け取る UINTs の配列へのポインター。 3 番目のヒストグラムがない場合は NULL を 渡します。
[out] channel3
種類: UINT*
4 番目のヒストグラムがある場合に 4 番目のヒストグラムを受け取る UINTs の配列へのポインター。 4 番目のヒストグラムがない場合は NULL を 渡します。
戻り値
種類: 状態
メソッドが成功した場合は、Status 列挙の要素である Ok を返します。
メソッドが失敗した場合は、 Status 列挙体の他の要素のいずれかを返します。
解説
返されるヒストグラムの数は、format パラメーターに渡される HistogramFormat 列挙要素によって異なります。 たとえば、 format が HistogramFormatRGB と等しい場合は、赤、緑、青のチャネルごとに 1 つずつ、3 つのヒストグラムが返されます。 その場合、 channel0 は赤チャネル ヒストグラムを受け取る配列を指し、 channel1 は緑チャネル ヒストグラムを受け取る配列を指し、 channel2 は青チャネル ヒストグラムを受け取る配列を指します。 HistogramFormatRGB の場合、channel3 は 4 番目のヒストグラムがないため、NULL に設定する必要があります。 詳細については、 HistogramFormat 列挙を参照してください。
例
次の例では、BMP ファイルから Bitmap オブジェクトを作成します。 このコードでは、ビットマップから 3 つのヒストグラム (赤、緑、青のチャネルごとに 1 つずつ) を取得します。 列挙要素 HistogramFormatRGB の名前の RGB の順序に注意してください。 R は最初なので、 ch0 に対応します。 緑は 2 番目なので、 ch1 に対応します。 青は 3 番目なので、 ch2 に対応します。 Bitmap::GetHistogram に渡される最後のパラメーターは、4 番目のヒストグラムがないため NULL です。
Bitmap myBitmap(L"Picture.bmp");
UINT numEntries;
myBitmap.GetHistogramSize(HistogramFormatRGB, &numEntries);
UINT* ch0 = new UINT[numEntries];
UINT* ch1 = new UINT[numEntries];
UINT* ch2 = new UINT[numEntries];
myBitmap.GetHistogram(HistogramFormatRGB, numEntries, ch0, ch1, ch2, NULL);
// Print the histogram values for the three channels: red, green, blue.
for(UINT j = 0; j < numEntries; ++j)
{
printf("%u\t%u\t%u\t%u\n", j, ch0[j], ch1[j], ch2[j]);
}
delete ch0;
delete ch1;
delete ch2;
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | gdiplusheaders.h (Gdiplus.h を含む) |
Library | Gdiplus.lib |
[DLL] | Gdiplus.dll |