Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 8
1

цикл работает неправильно, не получается закрасить окружность попиксельно C#

03.05.2013, 18:45. Показов 881. Ответов 2
Метки нет (Все метки)

Добрый день! Помогите пожалуйста с решением проблемы, не пойму, что я делаю не правильно...Вобщем я нарисовала попиксельно окружность и теперь мне нужно ее закрасить...вот кусок кода, где я пытаюсь это сделать:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//zalivka    (xt и yt - координаты середины окружности, r - радиус)
                  int xt = 320, yt = 240, N = yt + 2*r, i2, j2, jmin = yt - r, jmax = yt + r, imax = xt + r, imin = xt - r;
                  Color pixel;
                  Color newColor = Color.FromArgb(0, 127, 255);
           
                  int[] X_min = new int[N];
                  int[] X_max = new int[N];
               /*Сначало задаю границы области (в массивы X_min и X_max заносятся координаты X начала отрезка и его конца соответственно а координаты Y задаю в ручную, т.к знаю чему равна окружность по вертикали + смещение по Y)*/
                  for (j2 = jmin+1; j2 < jmax; j2++)
                  {
                      imax = 0; imin = 0;
                      imax = xt + r + 5;
                      imin = xt - r - 5;
                      pixel = image1.GetPixel(imin, j2);
                      while (pixel != granica && imin < pictureBox1.Width) 
      /*если цвет пикселя равен цвету границы окружности, то выходим из цикла*/
                      {
                          
                              imin++;
                              pixel = image1.GetPixel(imin, j2);
                           
                      }
                      X_min[j2] = imin + 1; //заносим координату X в массив, для координат X начала отрезка 
 
                      pixel = image1.GetPixel(imax, j2);
                      while (pixel != granica && imax < pictureBox1.Width)
                      {
                              imax--;
                              pixel = image1.GetPixel(imax, j2);                        
                      }
                      X_max[j2] = imax - 1; //заносим координату X в массив, для координат X конца отрезка 
                  }
 
//закрашиваем внутри созданной границы
                  for (j2 = jmin+1; j2 <= jmax; j2++)
                  {
                      for (i2 = X_min[j2]; i2 <= X_max[j2]; i2++)
                      {
                          image1.SetPixel(i2, j2, newColor);
                      }
                  }
                  pictureBox1.Invalidate();

проблема в том, что когда пиксель становится равным цвету границы - цикл продолжается, хотя должен заканчиваться... что я делаю не так??
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2013, 18:45
Ответы с готовыми решениями:

Попиксельно закрасить окружность
Помогите , нужно попиксельно закрасить окружность через кнопку button4_Click using System;...

Неправильно работает цикл for, и функции работают неправильно
1) Неправильно работает цикл for(k=0...). Входит только 1 раз, дальше вылетает. Делал пошаговую...

Цикл работает неправильно, в то время как POST работает
Всем привет! Я хотел написать под php скрипт с авторизацией, брут, на своем сайте(подбор пароля)....

Неправильно работает цикл for
Здравствуйте. Вот код: for($i = 4.05; $i &lt;= 11.25; $i = $i + 0.8 ){ echo $i; } ...

2
СуперМодулятор
133 / 132 / 48
Регистрация: 03.11.2012
Сообщений: 974
03.05.2013, 18:55 2
Все Вы делаете не так... В С# есть метод рисования окружности:
C#
1
2
3
 Graphics g = e . Graphics ;
Pen pen = new Pen ( Color . Blue );
g . DrawEllipse( pen, 50, 50, 100, 100);
0
1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 8
03.05.2013, 19:02  [ТС] 3
Цитата Сообщение от Izobara Посмотреть сообщение
Все Вы делаете не так... В С# есть метод рисования окружности:
C#
1
2
3
 Graphics g = e . Graphics ;
Pen pen = new Pen ( Color . Blue );
g . DrawEllipse( pen, 50, 50, 100, 100);
Спасибо большое за познания C#, но вы явно не понимаете проблему, а проблема в том, что я студентка, и по компьютерной графике у меня есть конкретное задание нарисовать окружность методом Брезенхема и заполнить ее попиксельно, а не готовыми функциями Graphics
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2013, 19:02

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Неправильно работает цикл
почему выводит последнее значение в таблице(т.е. из последней строки) и 7 раз а в таблице 5 строк ...

Цикл неправильно работает
Подскажите пожалуста что нетак в коде. Когда работает этот скрипт в меню выводит одну и туже...

Цикл работает неправильно
Цикл отрабатывает только 1 раз. Не выполняется условный оператор. FASM org 100h jmp start...

Цикл неправильно работает
Цикл правильно выполняется для нулевого значения, но не переходит на первое, а опять выполняется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.