次の方法で共有


色のスケーリング

スケーリング変換では、4 つの色コンポーネントの 1 つ以上を数値で乗算します。 次の表は、スケーリングを表すカラー行列のエントリを示したものです。

スケーリングされるコンポーネント 行列のエントリ
[赤] [0][0]
[緑] [1][1]
[2][2]
Alpha [3][3]

 

次の例では、ファイル ColorBars2.bmpから Image オブジェクトを作成します。 次に、このコードでは、画像内の各ピクセルの青のコンポーネントを、2 の倍数でスケーリングします。 元の画像は、変換された画像と共に描画されます。

Image            image(L"ColorBars2.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

ColorMatrix colorMatrix = {
   1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
   0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
   0.0f, 0.0f, 2.0f, 0.0f, 0.0f,
   0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
   0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

次の図は、左側の元のイメージと右側の拡大縮小されたイメージを示しています。

4 つの色付きのバーを表示し、同じバーを異なる色で表示します。

次の表は、青いスケーリングの前後の 4 つのバーのカラー ベクトルを示しています。 4 番目のカラー バーの青のコンポーネントが 0.8 から 0.6 になったことに注目してください。 これは、GDI+ によって結果の小数部のみが保持されるためです。 たとえば、(2)(0.8) = 1.6 になり、1.6 の小数部は 0.6 です。 小数部のみを保持することで、結果は常に [0, 1] の間隔に収まります。

変更元 スケーリング済み
(0.4, 0.4, 0.4, 1) (0.4, 0.4, 0.8, 1)
(0.4, 0.2, 0.2, 1) (0.4, 0.2, 0.4, 1)
(0.2, 0.4, 0.2, 1) (0.2, 0.4, 0.4, 1)
(0.4, 0.4, 0.8, 1) (0.4, 0.4, 0.6, 1)

 

次の例では、ファイル ColorBars2.bmpから Image オブジェクトを作成します。 次に、画像内の各ピクセルの赤、緑、および青のコンポーネントをスケーリングします。 赤のコンポーネントは 25% スケールダウン、緑のコンポーネントは 35% スケールダウン、青のコンポーネントは 50% スケールダウンされます。

Image            image(L"ColorBars.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

ColorMatrix colorMatrix = {
   0.75f, 0.0f,  0.0f, 0.0f, 0.0f,
   0.0f,  0.65f, 0.0f, 0.0f, 0.0f,
   0.0f,  0.0f,  0.5f, 0.0f, 0.0f,
   0.0f,  0.0f,  0.0f, 1.0f, 0.0f,
   0.0f,  0.0f,  0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

次の図は、左側の元のイメージと右側の拡大縮小されたイメージを示しています。

4 色のバーを示す図。次に、異なる色のバー

次の表は、赤、緑、青のスケーリングの前後の 4 つのバーのカラー ベクターを示しています。

変更元 スケーリング済み
(0.6, 0.6, 0.6, 1) (0.45, 0.39, 0.3, 1)
(0, 1, 1, 1) (0, 0.65, 0.5, 1)
(1, 1, 0, 1) (0.75, 0.65, 0, 1)
(1, 0, 1, 1) (0.75, 0, 0.5, 1)