0

画像のすべてのピクセルの色相または「H」を取得してから、特定の色相を持つピクセルの色を変更しようとしています。青の色相が異なる、色相>=210および<=260のすべてのピクセルを変更しようとしています。

これが私のコードです:

// 'i' is the image
// 'b' is the bitmap of the image
float y;
for (int a = 0; a < i.Height; a++) 
{ 
    for (int c = 0; c < i.Width; c++) 
    { 
        y = b.GetPixel(c, a).GetHue(); 
        if (y >= 210 && y <= 260) 
            { 
                b.SetPixel(c, a, Color.Black); 
            } 
    } 
}

唯一の問題は、210〜260の青色をピックアップしないことです。これは正しく行われていると確信していますが、機能していないため、そうではないはずです。

この問題を解決できる場合は、ここに投稿してください、ありがとう!

編集:SetPixelにブレークポイントを設定すると、何度も呼び出されるので、画像が正しく保存されているかどうかを確認します。

編集2:私はそれを理解しました!私は写真を保存していませんでした。

4

2 に答える 2

0

使用、LockBitsメソッド、ルーク!

または、グラフィックスコンテキストで行う方が良いと思います。

于 2012-04-26T12:42:08.310 に答える
0

それは私のためにちょっと働いた。以下のコードには、imgViwerというPictureBoxを備えたWindowsフォームがあります。次に、ボタンをクリックしてコードを実行します。

private void HueFilter()
{
  float y;
  Bitmap i = (Bitmap)imgViwer.Image;

  for (int a = 0; a < i.Height; a++)
  {
      for (int c = 0; c < i.Width; c++)
      {                   
          y = i.GetPixel(c, a).GetHue();
          if (y >= 210 && y <= 260)
          {
              i.SetPixel(c, a, Color.Black);
          }
      }
  }

  imgViwer.Image = i;
}

あなたの場合、更新のためにPictureBoxに割り当てられるべきbと呼ばれる出力画像があります。

于 2012-05-04T19:05:55.783 に答える