任意の画像を開いて と の 2 つの色を選択する簡単なプログラムを作成したいと考えていBackgroundColor
ますOutlineColor
。次に、「オブジェクト」の周りにアウトラインを作成します。
これまでの私のコードは次のとおりです。
for (int y = 1; y < height - 1; y++) //iterate trough every pixel
{ //in my bitmap
for (int x = 1; x < width - 1; x++)
{
//i want to put a pixel only if the the curent pixel is background
if (bitmap.GetPixel(x, y) != BackgroundColor)
continue;
var right = bitmap.GetPixel(x + 1, y);
var down = bitmap.GetPixel(x, y + 1);
var up = bitmap.GetPixel(x, y - 1);
var left = bitmap.GetPixel(x - 1, y);
//get the nearby pixels
var neibours = new List<Color> {up, down, left, right};
var nonBackgroundPix = 0;
//then count how many are not outline nor background color
foreach (Color neibour in neibours)
{
if (neibour != BackgroundColor && neibour != OutlineColor)
{
nonBackgroundPix++;
}
}
//finaly put an outline pixel only if there are 1,2 or 3 non bg pixels
if (nonBackgroundPix > 0 && nonBackgroundPix < 4)
{
bitmap.SetPixel(x, y, OutlineColor);
}
}
}
そして、コードを実行して入力すると問題が発生し ます
そして、私が欲しいのは
私のコードに問題が見つかった場合は、これを行うためのより良いアルゴリズムを知っているか、何らかの方法でそれを行うことができます. よろしくお願いします!