Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 4 / 5
Регистрация: 07.12.2015
Сообщений: 81
1

Поиск крайнего белого пикселя в Bitmap

19.10.2016, 13:47. Показов 989. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
необходимо найти крайние пиксели (первые попавшиеся на линии) с левой, правой и верхней стороны в изображении.
с левой стороны ищется, с двух других почему то пролетает.
не смотрите что там дальше с точками делается, это уже расчеты, проблема в фиксации найденного белого пикселя.
вывожу небольшой стек на RichTextBox.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog(); // создаем новый экземпляр OpenFileDialog
            if (dialog.ShowDialog() == DialogResult.OK);// если все ОК, то збс                  
            Bitmap picture = new Bitmap(dialog.FileName); // Загружаем выбранную картинку в Bitmap            
            int Width = picture.Width; // задаем переменную для высоты изображения
            int Height = picture.Height; // задаем переменную для ширины изображения
            int x; // счетчик координаты X
            int y; // счетчик координаты Y
            int i = 0;//флажок
            Point point1 = new Point();//
            Point point2 = new Point();// создаем точки
            Point point3 = new Point();//
            Point point4 = new Point();//
                                                                       
            for (x = 0; x < Width; x++) // перебор пикселей ЛЕВОЙ области изображения
            {
                for (y = 0; y < Height; y++)//
                {
                    if (picture.GetPixel(x, y).ToArgb() == Color.White.ToArgb())// если находим белый пиксель
                    {
                        i = 1;//поднимаем флажок
                        point2.X = x; // записываем его координаты
                        point2.Y = y; //                        
                    }
                    if (i >= 1) break;
                }
                if (i >= 1) break;
            }
 
            for (x = Width - 1; x > 0; x--) // перебор пикселей ПРАВОЙ области изображения
            {
                for (y = 0; y < Height; y++)//
                {
                    if (picture.GetPixel(x, y).ToArgb() == Color.White.ToArgb())// если находим белый пиксель
                    {
                        i = 1;//поднимаем флажок
                        point3.X = x; // записываем его координаты 
                        point3.Y = y; //                      
                    }
                    if (i >= 1) break;
                }
                if (i >= 1) break;
            }
 
            for (y = 0; y < Height; y++) // перебор пикселей ВЕРХНЕЙ области изображения
            {
                for (x = 0; x < Width; x++)//
                {
                    if (picture.GetPixel(x, y).ToArgb() == Color.White.ToArgb())// если находим белый пиксель
                    {
                        i = 1;//поднимаем флажок
                        point1.X = x; // записываем его координаты
                        point1.Y = y;
                    }
                    if (i >= 1) break;
                }
                if (i >= 1) break;
            }
 
            pictureBox1.Image = picture;
            point4.X = point1.X;//
            point4.Y = point2.Y;// задаем координаты 4-ой точки
            double sh = point3.X - point2.X; // находим ширину 
            double v = point4.Y - point1.Y; // находим высоту
            double k = v / sh; // вычисляем коэффициент
            //выводим справочную информацию на richTextBox1
            richTextBox1.Text = "Размер изображения(" + Width.ToString() + "x" + Height.ToString( )+ ")" + Environment.NewLine +
                                "Ширина = " + sh.ToString() + Environment.NewLine +
                                "Высота = " + v.ToString() + Environment.NewLine +
                                "К = " + k.ToString() + Environment.NewLine +
                                "point1(" + point1.X.ToString() + "," + point1.Y.ToString() + ")" + Environment.NewLine +
                                "point2(" + point2.X.ToString() + "," + point2.Y.ToString() + ")" + Environment.NewLine +
                                "point3(" + point3.X.ToString() + "," + point3.Y.ToString() + ")" + Environment.NewLine +
                                "point4(" + point4.X.ToString() + "," + point4.Y.ToString() + ")" + Environment.NewLine;              
        }
использую прикрепленное изображение для теста (рисовал именно цветами белым и черным по RGB)

в стеке получаю следующее:
Размер изображения(640x400)
Ширина = -7
Высота = 194
К = -27,7142857142857
point1(0,0)
point2(7,194)
point3(0,0)
point4(0,194)

точки 1 и 3 пустые, почему так?
Миниатюры
Поиск крайнего белого пикселя в Bitmap  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2016, 13:47
Ответы с готовыми решениями:

Возможно ли определять цвет пикселя PictureBox, не прибегая к использованию Bitmap
Возможно ли определять цвет пикселя, не прибегая к использованию Bitmap? Я так понял, что на нем...

поиск пикселя
добрый день столкнулся с проблемой: нужно искать определенный пиксель и наводить на него курсор...

Поиск пикселя в изображении
где почитать про поиск пикселей определенного цвета в изображении?

Поиск System.Drаwing.Bitmap
Доброго времени суток. Помогите пожалуйста. Очень нужна System.Driwing.dll с System.Driwing.Bitmap....

2
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
19.10.2016, 14:37 2
попробуйте обнулить ваш "флажок" перед каждым новым поиском
1
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
19.10.2016, 18:44 3
Mishana_319, очень похожую задачу я выполнял вот так. Как минимум, мой вариант будет намного быстрее.
0
19.10.2016, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2016, 18:44
Помогаю со студенческими работами здесь

Поиск пикселя по цвету в Bitmap
Нужно найти координаты пикселя в некоторой области по цвету. Пробовал использовать GetPixel, но...

Поиск пикселя и поиск изображения на экране
Переписываю код из clickermann для запуска его на C++. Мне нужны две функции которые выполняли бы...

Поиск пикселя и удержание
Поиск пикселя определенного цвета (в чужом окне), и удержание на нем курсора мыши т.е. если пиксель...

Не происходит поиск пикселя
Есть вот такой код: procedure TForm1.Button1Click(Sender: TObject); var p:Tcolor; i,j:integer; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru