изменение цвета пикселя в 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;
}
Но в результате все изображение меняется на красное, как это исправить !!
1 ответ:
Вы пробовали отладку (вы могли бы легко узнать, почему все пиксели стали красными)? Вся ваша картина становится красной, потому что утверждение
Причина, по которой это происходит, заключается в том, что вы сравниваете структуры. Однако ваш пиксельifВсегдаtrue.nameне будет говоритьWhite(с чем вы сравниваете), но он будет содержать строку со значениемhexвашего цвета (например,ffffff). Поэтому оно никогда не бывает равным, потому что объекты различны. Поэтому, поскольку вы хотите увидеть, еслиARGBзначения те же, вы должны сравнить их.Измените свое утверждение на это, чтобы сравнить значения
ARGB:if (pxl.ToArgb() != Color.White.ToArgb())Также убедитесь, что вы проверили комментарий Коди Грея, так как ваш код абсолютно неэффективен. Если эффективность важна для вас, попробуйте другой подход, но это выходит за рамки данного вопроса.
Comments