Я пытаюсь получить пиксели под многоугольником; однако мне кажется, что я не могу точно получить все пиксели. Ниже приведен код, который у меня есть:
private void DrawPolygon()
{
PointF[] pts = new PointF[]{new PointF(5.196057f, 4.13434839f), new PointF(5.528517f, 4.621298f), new PointF(7.073008f, 6.5661006f), new PointF(5.28491259f, 9.206118f), new PointF(4.80768776f, 6.595068f), new PointF(5.196057f, 4.13434839f)};
GraphicsPath gp = new GraphicsPath(FillMode.Alternate);
gp.AddPolygon(pts);
Bitmap bmp = Bitmap.FromFile("...");
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.None;
g.PixelOffsetMode = PixelOffsetMode.Half;
using (Brush b = new SolidBrush(Color.White))
{
g.FillPath(b, gp);
}
bmp.Save("...");
}
На изображении ниже (слева) вы можете видеть, что несколько пикселей под многоугольником исключены. Изображение справа было исходным, все пиксели имели значение. Я чувствую, что мне не хватает настройки в «Графика», но я не могу понять, что именно.
Извините, я только пытался опубликовать соответствующий код. Путь прорисовки добавит еще несколько пикселей, но все равно пропустит некоторые осколки.
Это будет зависеть от свойств пера; но тогда вы можете ввести больше, что хотите ..
Верно, пробовал с разной шириной. Это приблизит меня к правильному решению, но не все пиксели (или пиксели, не покрытые многоугольником). Вы хотите сказать, что это невозможно с графикой?
Точно сказать не могу. Обычно проблема округления (как мне кажется) решается путем изменения данных; часто «прибавляя 1/2». Если вы добавите 1/2 пикселя (изнутри), результат должен быть правильным. Но для этого нужно знать многоугольники ..
Я изменил и добавил несколько строк, чтобы код компилировался правильно: очевидно, заменил "..." файлом. Я уже добавил PixelOffsetMode = PixelOffsetMode.Half, который настраивал бы 1/2 пикселя.
Я имел в виду сделать полигон больше на 1/2 пикселя. PixelOffsetMode.Half этого не делает; обычно это было бы неправильно; на самом деле в большинстве случаев результат будет единственно правильным!





Похоже, заполняются только те пиксели, которые внутри на 50 +%. Мне кажется правильным. Вы можете добавить DrawPath для попадания ручки в пиксели границы .. - Также: пожалуйста, попробуйте размещать только настоящий код! (Фрагмент не полный и даже не компилируется)