Путаница с CreatePolygonRgn

Я работаю с делфи. У меня есть массив точек, которые продолжаются, как показано на рисунке.

альтернативный текст

Затем я передаю этот массив CreatePolygonRgn и создаю область, скажем, rgn1.

rgn1 := CreatePolygonRgn(tmpary1[0],Count,WINDING);

Затем я заполняю область и показываю ее в своем элементе управления TImage, как показано на рисунке. Проблема с левой стороны, точки также покрываются в области, но с правой стороны точки массива не покрываются. На изображении видно, что слева зеленая граница не показана, а справа граница видна. Я где-то ошибаюсь??? Если мой вопрос вам непонятен, пожалуйста, спросите.
Спасибо.

Изменить:

  for cnt := 0 to Count - 1 do begin
     p1 := imgmain.Picture.Bitmap.ScanLine[tmpary[cnt].Y];
     p1[tmpary[cnt].X].rgbtBlue := 0;
     p1[tmpary[cnt].X].rgbtGreen := 255;
     p1[tmpary[cnt].X].rgbtRed := 0;
  end;
  rgn1 := CreatePolygonRgn(tmpary1[0],tmpseq1.Count,WINDING);
  imgmain.Picture.Bitmap.Canvas.Brush.Color := clRed;
  FillRgn(imgmain.Picture.Bitmap.Canvas.Handle,rgn1,imgmain.Picture.Bitmap.Canvas.Brush.Handle);

person Himadri    schedule 25.06.2010    source источник
comment
Покажите код, где рисуется зеленый контур, а где красная заливка. Я думаю, что вы рисуете красную заливку на один пиксель левее, чем зеленый контур.   -  person The_Fox    schedule 25.06.2010


Ответы (2)


Может просто так оно работает. FillRect, например, включает левый и верхний границ, но исключает правую и нижнюю границы прямоугольника. Я думаю, что то же самое, вероятно, относится к FillRgn.

Изменить: подтверждено здесь, слишком.

person Ondrej Kelle    schedule 25.06.2010
comment
@TOndrej О... правильно.. :-( Я хотел весь регион... что мне делать??? Я использую заливку для получения очков, как вы уже знаете из моего предыдущего вопроса... - person Himadri; 25.06.2010
comment
@TOndrej Но msdn.microsoft.com/en -us/library/dd183511%28v=VS.85%29.aspx Это показывает, что createpolygonrgn исключит весь контур... в то время как в моем случае он исключает правый и нижний контуры??? - person Himadri; 25.06.2010
comment
Например, вы можете просмотреть прямоугольники в своем массиве и сделать их на один пиксель шире и выше, используя InflateRect API. - person Ondrej Kelle; 25.06.2010
comment
Из вашего вопроса (вопросов) неясно, что вы делаете. Откуда берется ваш массив очков? - person Ondrej Kelle; 25.06.2010
comment
@TOndrej Если я нарисую прямоугольник с помощью createpolygonrgn, а затем заполню его, он также закроет контур. и InflateRect уменьшит ширину слева и справа и высоту как сверху, так и снизу, поэтому я не могу это использовать... Моя проблема до сих пор не решена... - person Himadri; 25.06.2010
comment
Извините, но ваши комментарии не проясняют ситуацию. CreatePolygonRgn ничего не рисует. InflateRect можно использовать для увеличения или уменьшения размера прямоугольника в зависимости от параметров. Было бы полезно, если бы вы могли более четко сформулировать шаги для воспроизведения вашей проблемы (лучше всего будет использовать минимальный компилируемый код для демонстрации проблемы), что вы ожидали получить и чем ваши результаты отличаются от ожидаемых. - person Ondrej Kelle; 25.06.2010
comment
@Tondrej Хорошо .. Я думаю, что не могу объяснить свою проблему, написав ее. Но, по крайней мере, с вашей помощью я теперь знаю, почему я не получаю ожидаемого результата. Я постараюсь решить это сам. Спасибо за ваши старания. - person Himadri; 28.06.2010

Наконец я нашел возможное решение моей проблемы, а также решение этой проблемы, поскольку оба вопроса связаны друг с другом.
Я заполнил область, а затем попытался получить границу этой области. Я получал некоторые точки исходного массива в качестве границы, а некоторые точки были фактическими граничными точками. Я хотел все точки фактической границы.


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

person Himadri    schedule 07.07.2010
comment
@TOndrej Привет, это просто для того, чтобы сообщить вам, что я нашел решение с вашей помощью. - person Himadri; 07.07.2010