Можно ли избежать плохого / отличного рендеринга FillPolygon и DrawPolygon?

Я использую FillPolygon с полупрозрачным цветом, чтобы нарисовать треугольник (стрелка указателя). Я заметил, что FillPolygon дает неловкие результаты с изоцель треугольником. Одна из сторон перекрывает сторону DrawPolygon , а две другие - нет. Я бы ожидал ничего или все, но не что-то среднее.

Вот пример: DrawPolygon использует полупрозрачный красный, а FillPolygon использует полупрозрачный зеленый. Вы можете видеть, что одна сторона коричневая, две другие стороны красные.

альтернативный текст http://www.slimcode.com/downloads/arrow.png

Координаты для этого примера: {X = 36, Y = 201}, {X = 42, Y = 207}, {X = 30, Y = 207}.

Использование непрозрачного цвета решило бы все, так как я мог бы вызывать DrawPolygon и FillPolygon, но мне нужно использовать полупрозрачный цвет. Я рисую в изображение, если оно может иметь значение.

12.12.2008 15:36:56
пожалуйста, опубликуйте еще две фотографии, по одной для каждого розыгрыша. Как и вы, я нахожу это загадочным. В отличие от вас, у меня нет C # вокруг.
Will 15.12.2008 22:49:21
2 ОТВЕТА

Вы хотите использовать растровое изображение и сделать что-то вроде этого. Обратите внимание, что это не исполняемый код.

    Dim image As New Bitmap(<my_Xsize>, <my_Ysize>)
    Dim gr As Graphics = Graphics.FromImage(image)
    <Draw your FillPolygon>
    <Erase the leftside of the polygon>
    <Draw your Polygon>

     gr.DrawImage(image, <myXcoor>, <myYcoor>)

Используя растровое изображение, вы можете перейти на уровень пикселей, чтобы получить именно то, что вам нужно.

1
12.12.2008 16:47:40
Эта стрелка может указывать в любом направлении, поэтому она нарисована, но я попробую сделать изображение с поворотом, стоит попробовать. Не нужно рисовать-стирать-рисовать, просто PNG-изображение должно быть в порядке! Спасибо!
Martin Plante 12.12.2008 18:14:20
Идея состоит в том, что вы используете растровое изображение в качестве промежуточной поверхности рисования. Так что это будет работать в любом направлении.
RS Conley 12.12.2008 18:50:38
Я не могу использовать эту технику, так как я не гарантирую, что она всегда будет наименьшей стороной, которая будет плохо выглядеть во всех системах, во всех версиях .NET FX и т. Д. Лучше использовать статическое изображение PNG со стрелкой и нарисовать его. с RotateTransform.
Martin Plante 15.12.2008 04:07:17

Хак: Нарисуйте всю стрелку как непрозрачную в промежуточном буфере, затем нарисуйте весь буфер на вашем изображении, используя соответствующую прозрачность.

0
12.12.2008 16:54:13
Нет, он предлагает стереть левую сторону многоугольника, я предлагаю нарисовать его полностью без прозрачности на промежуточном буфере, затем нарисовать изображение в буфере, используя соответствующую прозрачность.
Pop Catalin 6.01.2009 22:04:38