3

任務のために助けが必要です。基本的に、これは私がやりたいことです:

  • イメージをPictureBox
  • 255(最大値)と各画素のR値の差、255とG値の差、B値も計算
  • 上記の計算から、最小の絶対値は、ピクセルの色がその色に近いことを示します (例: (255-R 値) は最小の絶対値を持つため、ピクセルはその色に近くなります)。
  • ピクセルの色を近い色に変更します (上の例では、赤に変更することを意味します)。
  • 出力ピクチャボックスに結果を表示します

その結果、その三原色の画像が得られます。

私は次のようなコードを書きました:

    Bitmap img = new Bitmap(InputPictureBox.Image);
        byte R, G, B;
        Color pixelColor;
        for (int x = 0; x < img.Width; x++)
        {
            for (int y = 0; y < img.Height; y++)
            {
                pixelColor = img.GetPixel(x, y);
                R = (byte) Math.Abs(pixelColor.R - 255);
                G = (byte) Math.Abs(pixelColor.G - 255);
                B = (byte) Math.Abs(pixelColor.B - 255);

                if (R < G && R < B)
                {
                    pixelColor = Color.Red;
                }
                else if (G < R && G < B)
                {
                    pixelColor = Color.Green;
                }
                else if (B < R && B < G)
                {
                    pixelColor = Color.Blue;
                }
            }
        }
  OutputPictureBox.Image = img;

問題は、カラー画像が反転することです。では、私のコードの何が問題なのですか? ステートメントが機能しないと思いますが、そのif理由はわかりません。私が間違っている?

上記の私のコードに関連するもう1つの質問は、R / G / B値のギャップをそのように計算するだけで実際に機能しますか、それともユークリッド距離を使用して絶対に行う必要がありますか?

よろしければ、これを修正する方法、またはコードの書き方を教えてください。よく似た質問を読んだことがありますが、与えられた答えはまだ手がかりを与えてくれませんでした。

4

2 に答える 2