Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120

Размытие выделенной области изображения

12.02.2015, 22:04. Показов 4088. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не работает размытие blur выделенной области рисунка. Весь рисунок размывать не надо,только выделенную часть. После загрузки и выделения области как только тракбаром переключаешь - выводит ошибку(указал в картинке).

Загружаю картинку

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   private void loadImageToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "JPG Files (*.jpg)|*.jpg|All files (*.*)|*.*";
 
 
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                string ImagePath = dlg.FileName.ToString();
                pictureBox1.ImageLocation = ImagePath;
                resetmenus();
 
            }
 
        }
Выделяю область картинки

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
   //Выбрать область
        private void selectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (selectToolStripMenuItem.Checked == true)
            {
                selectToolStripMenuItem.Checked = false;
                copySelectionToolStripMenuItem.Enabled = false;
                printToolStripMenuItem.Enabled = false;
                DrawRectangle = false;
                pictureBox1.Invalidate();
                pictureBox1.Cursor = Cursors.Default;
            }
            else
            {
                selectToolStripMenuItem.Checked = true;
                copySelectionToolStripMenuItem.Enabled = true;
                printToolStripMenuItem.Enabled = true;
                panToolStripMenuItem.Checked = false;
                pictureBox1.Cursor = Cursors.Cross;
 
            }
 
        }
        //нажатие л.к. мыши(запоминает начальные координаты)
        private void pictureBox1_MouseDown_1(object sender, MouseEventArgs e)
        {
            if (pictureBox1.Cursor == Cursors.Cross)
            {
                DrawRectangle = true;
                DrawRectangle_Mouse_X_Start = e.Location.X;
                DrawRectangle_Mouse_Y_Start = e.Location.Y;
                DrawRectangle_Mouse_X_End = e.Location.X + 1;
                DrawRectangle_Mouse_Y_End = e.Location.Y + 1;
            }
            if (pictureBox1.Cursor == Cursors.Hand)
            {
                m_PanStartPoint = new Point(e.X, e.Y);
            }
 
        }
        //Сдвиг мыши(+ конечные координаты)
        private void pictureBox1_MouseMove_1(object sender, MouseEventArgs e)
        {
            if (pictureBox1.Cursor == Cursors.Cross && e.Button == MouseButtons.Left)
            {
                DrawRectangle_Mouse_X_End = e.Location.X;
                DrawRectangle_Mouse_Y_End = e.Location.Y;
                pictureBox1.Refresh();
 
            }
            if (pictureBox1.Cursor == Cursors.Hand && e.Button == MouseButtons.Left)
            {
                int DeltaX;
                int DeltaY;
                DeltaX = (m_PanStartPoint.X - e.X);
                DeltaY = (m_PanStartPoint.Y - e.Y);
                tabPage1.AutoScrollPosition = new System.Drawing.Point((DeltaX - tabPage1.AutoScrollPosition.X), (DeltaY - tabPage1.AutoScrollPosition.Y));
            }
 
        }
 
        private void pictureBox1_Paint_1(object sender, PaintEventArgs e)
        {
            if (DrawRectangle)
            {
                int MouseX;
                int MouseY;
                MouseX = DrawRectangle_Mouse_X_End - DrawRectangle_Mouse_X_Start;
                MouseY = DrawRectangle_Mouse_Y_End - DrawRectangle_Mouse_Y_Start;
 
                //Up and Left
                if (MouseX < 0 && MouseY < 0)
                {
                    rect = new Rectangle((new Point(DrawRectangle_Mouse_X_End, DrawRectangle_Mouse_Y_End)), new Size(System.Math.Abs(MouseX), System.Math.Abs(MouseY)));
                }
 
                //Down and Right
 
                if (MouseX > 0 && MouseY > 0)
                {
                    rect = new Rectangle((new Point(DrawRectangle_Mouse_X_Start, DrawRectangle_Mouse_Y_Start)), new Size((MouseX), (MouseY)));
                }
 
                //Up and Right
                if (MouseX < 0 && MouseY > 0)
                {
                    rect = new Rectangle((new Point(DrawRectangle_Mouse_X_End, DrawRectangle_Mouse_Y_Start)), new Size(System.Math.Abs(MouseX), MouseY));
                }
 
                //Down and Left
                if (MouseX > 0 && MouseY < 0)
                {
                    rect = new Rectangle((new Point(DrawRectangle_Mouse_X_Start, DrawRectangle_Mouse_Y_End)), new Size(MouseX, System.Math.Abs(MouseY)));
                }
                try
                {
                    e.Graphics.DrawRectangle(Pens.Black, rect);
                }
                catch (Exception) { }
 
            }
}
  //Функция запоминания скопированной выделенной части
        private Bitmap CropBitmap(Bitmap scrBitmap, int crop_X, int crop_Y, int crop_Width, int crop_Height)
        {
            Bitmap bmp;
            bmp = new Bitmap(crop_Width, crop_Height);
            Graphics g;
            g = Graphics.FromImage(bmp);
            g.DrawImage(scrBitmap, new Rectangle(0, 0, crop_Width, crop_Height), crop_X, crop_Y, crop_Width, crop_Height, GraphicsUnit.Pixel);
            g.Dispose();
            return bmp;
 
        }
Потом прописываю размытие

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
private static Bitmap Blur(Bitmap image, Rectangle rectangle, Int32 blurSize)
        {
            Bitmap blurred = new Bitmap(image.Width, image.Height);
            using (Graphics graphics = Graphics.FromImage(blurred))
            {
                graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
 
            }
            for (Int32 xx = rectangle.X; xx < rectangle.X + rectangle.Width; xx++)
            {
                for (Int32 yy = rectangle.Y; yy < rectangle.Y + rectangle.Height; yy++)
                {
                    Int32 avgR = 0, avgG = 0, avgB = 0;
                    Int32 blurPixelCount = 0;
 
                    for (Int32 x = xx; (x < xx + blurSize && x < image.Width); x++)
                    {
                        for (Int32 y = yy; (y < yy + blurSize && y < image.Height); y++)
                        {
                            Color pixel = blurred.GetPixel(x, y);
                            avgR += pixel.R;
                            avgG += pixel.G;
                            avgB += pixel.B;
 
                            blurPixelCount++;
                        }
                    }
                    avgR = avgR / blurPixelCount;
                    avgG = avgG / blurPixelCount;
                    avgB = avgB / blurPixelCount;
                    for (Int32 x = xx; x < xx + blurSize  && x < image.Width && x < rectangle.Width; x++)
                    {
                        for (Int32 y = yy; y < yy + blurSize && y < image.Width && y < rectangle.Height; y++)
                        {
                            blurred.SetPixel(x, y, Color.FromArgb(avgR, avgG, avgB));
                        }
                    }
 
                }
            }
            return blurred;
        }
 
        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            if(DrawRectangle)
            {
                pictureBox1.Image = Blur(new Bitmap(adjustedimage), new Rectangle(0, 0, rect.Width, rect.Height), trackBar1.Value); 
            }
        }
    }
Миниатюры
Размытие выделенной области изображения   Размытие выделенной области изображения  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2015, 22:04
Ответы с готовыми решениями:

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

Сглаживание,размытие изображения
Подскажите,где можно посмотреть работу с изображениями?В частности мне нужно Гауссово сглаживание выполнить. В picture box загоняется...

Поворот выделенной области
//функция расчёта новых координат public Point rotate(Point point, double angle, Point center) { Point rotated_point = new...

2
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
19.11.2017, 13:49
Простите за вопрос.. Где вы взяли adjustedimage? Он static?
0
5 / 4 / 5
Регистрация: 07.12.2015
Сообщений: 81
20.11.2017, 11:38
подключи через NuGet OpenCVSharp (второй версии лучше) и там сразу есть размытие по гауссу (smoof)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2017, 11:38
Помогаю со студенческими работами здесь

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

Перетаскивание WindowForm без заголовка в определенной выделенной области
Приветствую, возник вопрос с перетаскиванием формы. Суть такова: 1. У меня форма без заголовка т.е.: this.FormBorderStyle =...

Размытие изображения в частотной области
Как написать процедуру размытия изображения в частотной области с помощью гауссовской функции рассеяния точки с радиусом размытия в 7 ...

Поворот выделенной пользователем области изображения на заданный угол
Помогите! Необходимо выполнить поворот выделенной области изображения на заданный пользователем угол относительно выбранной пользователем...

Размытие изображения
Добрый день. Возникла проблема. Можно ли привести (размыть) изображение к одному пикселю? Фильтры делают это локально на небольших участках...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru