изменение цвета пикселя в C#



Здравствуйте я работаю над программой, которая читает все изображение и меняет цвет зеленой линии на красную например у меня есть это изображение этот образ и я хочу, чтобы программа c# получила зеленые пиксели и преобразовала их в красные
я попробовал этот код : '



public Bitmap ReadImgPixel(Bitmap img)
{
Bitmap pic = new Bitmap(img,img.Width,img.Height);
int a1 = img.Width;
int a2 = img.Height;
System.Drawing.Color[,] pixels = new System.Drawing.Color[a1,a2];

for (int i = 0;i< img.Width ; i++)
{
for(int j=0; j < img.Height; j++)
{

System.Drawing.Color pxl = img.GetPixel(i, j);
if (pxl != System.Drawing.Color.White)
{
pic.SetPixel(i, j, System.Drawing.Color.Red);
}

}

}
return pic;
}


Но в результате все изображение меняется на красное, как это исправить !!

1060   1  

1 ответ:

Вы пробовали отладку (вы могли бы легко узнать, почему все пиксели стали красными)? Вся ваша картина становится красной, потому что утверждение if Всегда true.

Причина, по которой это происходит, заключается в том, что вы сравниваете структуры. Однако ваш пиксель name не будет говорить White (с чем вы сравниваете), но он будет содержать строку со значением hex вашего цвета (например, ffffff). Поэтому оно никогда не бывает равным, потому что объекты различны. Поэтому, поскольку вы хотите увидеть, если ARGB значения те же, вы должны сравнить их.

Измените свое утверждение на это, чтобы сравнить значения ARGB:

if (pxl.ToArgb() != Color.White.ToArgb())

Также убедитесь, что вы проверили комментарий Коди Грея, так как ваш код абсолютно неэффективен. Если эффективность важна для вас, попробуйте другой подход, но это выходит за рамки данного вопроса.

Comments

    Ничего не найдено.